Pessoal, Como faço para acrescentar dias a uma data? por exemplo:
Date data = new Date(System.currentTimeMillis());
Suponhamos que quero somar 20 dias a esta data; Como posso fazer isso de forma que se altere também o mes caso a soma dos dias ultrapasse o mes corrente? (ex: 20/06/2006 + 20 dias = 10/07/2006)
Datehoje=newDate();Calendarcal=Calendar.getInstance();cal.setTime(hoje);cal.add(Calendar.DAY_OF_MONTH,1);// adiciona um dia na data// cal.add(Calendar.DAY_OF_MONTH, 20); // adiciona 20 dias na dataDateamanha=cal.getTime();
T
thingol
importjava.util.*;importjava.text.*;classTesteAdicionarDatas{publicstaticvoidmain(String[]args)throwsParseException{DateFormatdf=newSimpleDateFormat("dd/MM/yyyy");df.setLenient(false);// se pegar uma data inválida, "parse" lança uma exceçaoDatedt1=newDate();// Pegar a data e hora de hojeDatedt2=df.parse("29/02/2000");// Imprimir a data que é daqui a 20 diasCalendarcal=Calendar.getInstance();cal.setTime(dt1);cal.add(Calendar.DATE,20);dt1=cal.getTime();// agora dt1 recebe a data que é daqui a 20 dias.System.out.println(df.format(dt1));// Imprimir o dia posterior a 29/02/2000 - deve imprimir 01/03/2000cal.setTime(dt2);cal.add(Calendar.DATE,1);System.out.println(df.format(cal.getTime()));// Imprimir a data que é 29/02/2000, menos 10 diascal.setTime(dt2);cal.add(Calendar.DATE,-10);System.out.println(df.format(cal.getTime()));// Somar quatro meses a 31/05/2006 - note que a data resultante vai ser// 30/09/2006, nao 01/10/2006. É que ele dt1=df.parse("31/05/2006");cal.setTime(dt1);cal.add(Calendar.MONTH,4);System.out.println(df.format(cal.getTime()));}}
C
christianovale
Muito obrigado, pessoal, agora não vai ter erro!
Um abraço a todos! Valew!
M
marquessbr
Hi thingol!
your code save my life!
thank you!
N
nJunior
Um pouco mais simplificado…
GregorianCalendar vinte = new GregorianCalendar(2016, Calendar.JANUARY, 31); vinte.add(GregorianCalendar.DATE, 20);
Datedata=vinte.getTime();DateFormatformato=DateFormat.getDateInstance();Stringresultado=formato.format(data);System.out.println("Daqui a 20 dias estaremos em "+resultado+".\n");
I
igomes
Ou mais simplificado ainda você pode usar o Joda-Time
DateTime dateTime = new DateTime();
System.out.println(dateTime.getDayOfMonth());// dia de hoje
System.out.println(dateTime.plusDays(20).getDayOfMonth());// dia de hoje mais 20 dias
M
marquessbr
Eu sofri demais para incrementar datas, usei varios metodos que pesquisei na net e nada, dai resolvi incrementar essa cacaca no braço, tai o que tive de fazer:
// …
finalstaticint[]mMeses={31,28,31,30,31,30,31,31,30,31,30,31};privatestaticfinalintgreg[]={1582,10,5,14};privatestaticfinalintYEAR=0;privatestaticfinalintMONTH=1;privateImageViewprevDate;privateTextViewdisplayDate;privateImageViewnextDate;publicStringdateStr="";publicstaticintdays_of_february(intyear){intday;if((year>greg[YEAR])||((year==greg[YEAR])&&(greg[MONTH]==1||((greg[MONTH]==2)&&(greg[LAST_DAY]>=28))))){day=((year&3)!=0)?28:((!((year%100)!=0))?(((year%9)==2||(year%9)==6)?29:28):29);}elseday=((year&3)!=0)?28:29;if(year==4)day--;return(day);}// esse código foi para um app para android// prevDate e nextDate são dois botoes, um de cada lado da data// que é uma string num textedit@OverridepublicvoidonClick(Viewv){// incrementa apenas o diaif(v==prevDate){aNewDay--;}if(v==nextDate){aNewDay++;}// pega o ultimo dia de cada mes// se for fevereiro, verifica se o mes é bisexto, do contrario, pega o ultimo dia do mes// no array mMeseslastDayOfMonth=(aNewMonth==2?days_of_february(aNewYear):mMeses[aNewMonth-1]);if(aNewDay>lastDayOfMonth){aNewDay=1;aNewMonth++;if(aNewMonth>=12){aNewMonth=1;aNewYear++;}}if(aNewDay<1){aNewMonth--;if(aNewMonth<=1){aNewMonth=12;aNewYear--;}aNewDay=(aNewMonth==2?days_of_february(aNewYear):mMeses[aNewMonth-1]);}dateStr=String.valueOf(aNewDay)+"-"+String.valueOf(aNewMonth)+"-"+String.valueOf(aNewYear);}