estou querendo pegar as datas de uma semana inteira, tendo apenas a data de um dia.
Por exemplo tenho hoje 14/01/2008.
Iria obter 13,14,15,16,17,18,19 /01/2008.
Existe alguma API que faz isso ou vou ter que implementar na raça? O problema é devido aos meses com dias diferentes, etc.
import java.util.*;
import java.text.*;
class DiasDaMesmaSemana {
public static List<Date> diasDaMesmaSemana (Date dt) {
Calendar cal = Calendar.getInstance ();
cal.setTime (dt);
cal.set (Calendar.HOUR_OF_DAY, 1); // Devido ao horário de verão...
cal.set (Calendar.MINUTE, 0);
cal.set (Calendar.SECOND, 0); cal.set (Calendar.MILLISECOND, 0);
List<Date> ret = new ArrayList<Date>();
// Devemos coletar os dias da mesma semana. Para tanto, vamos pegar o dia da semana agora:
int diaSemana = cal.get (Calendar.DAY_OF_WEEK);
// Digamos que hoje seja quarta-feira (WEDNESDAY = 4). O primeiro dia da semana é domingo (SUNDAY = 1),
// e devemos contar desde o primeiro dia da semana (hoje - 4 + 1).
Calendar calFirst = (Calendar) cal.clone();
calFirst.add (Calendar.DATE, -diaSemana + Calendar.SUNDAY);
for (int i = 0; i < 7; ++i) {
ret.add (calFirst.getTime());
calFirst.add (Calendar.DATE, 1);
}
return ret;
}
public static void main(String[] args) throws ParseException {
DateFormat df = new SimpleDateFormat ("dd/MM/yyyy");
Date dt = df.parse ("14/01/2008");
DateFormat df2 = new SimpleDateFormat ("EEEEE, dd/MM/yyyy");
List<Date> dias = DiasDaMesmaSemana.diasDaMesmaSemana (dt);
for (Date dia : dias) {
System.out.println (df2.format (dia));
}
}
}