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)
Date hoje = new Date();
Calendar cal = 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 data
Date amanha = cal.getTime();
import java.util.*;
import java.text.*;
class TesteAdicionarDatas {
public static void main(String[] args) throws ParseException {
DateFormat df = new SimpleDateFormat ("dd/MM/yyyy");
df.setLenient (false); // se pegar uma data inválida, "parse" lança uma exceçao
Date dt1 = new Date(); // Pegar a data e hora de hoje
Date dt2 = df.parse ("29/02/2000");
// Imprimir a data que é daqui a 20 dias
Calendar cal = 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/2000
cal.setTime (dt2);
cal.add (Calendar.DATE, 1);
System.out.println (df.format (cal.getTime()));
// Imprimir a data que é 29/02/2000, menos 10 dias
cal.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()));
}
}
GregorianCalendar vinte = new GregorianCalendar(2016, Calendar.JANUARY, 31);
vinte.add(GregorianCalendar.DATE, 20);
Date data = vinte.getTime();
DateFormat formato = DateFormat.getDateInstance();
String resultado = formato.format(data);
System.out.println("Daqui a 20 dias estaremos em " + resultado + ".\n");
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
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:
// …
final static int[] mMeses = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
private static final int greg[] = {1582, 10, 5, 14};
private static final int YEAR = 0;
private static final int MONTH = 1;
private ImageView prevDate;
private TextView displayDate;
private ImageView nextDate;
public String dateStr = "";
public static int days_of_february(int year) {
int day;
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);
} else
day = ((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
@Override
public void onClick(View v) {
// incrementa apenas o dia
if (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 mMeses
lastDayOfMonth = (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);
}