2012-05-23 13 views

Respuesta

5

Prueba esto:

SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy"); 
Period weekPeriod = new Period().withWeeks(1); 
DateTime startDate = new DateTime(2012, 1, 1, 0, 0, 0, 0); 
DateTime endDate = new DateTime(2013, 1, 1, 0, 0, 0, 0); 
Interval i = new Interval(startDate, weekPeriod); 
while(i.getEnd().isBefore(endDate)) { 
    System.out.println("week : " + i.getStart().getWeekOfWeekyear() 
      + " start: " + df.format(i.getStart().toDate()) 
      + " ending: " + df.format(i.getEnd().minusMillis(1).toDate())); 
    i = new Interval(i.getStart().plus(weekPeriod), weekPeriod); 
} 

Tenga en cuenta que los números de la semana comienzan en 52 y luego van de 1 - 51, desde ene 1 no es un domingo.

Si por el contrario desea ver las fechas de cada semana, de lunes a domingo:

SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy"); 
Period weekPeriod = new Period().withWeeks(1); 
DateTime startDate = new DateTime(2012, 1, 1, 0, 0, 0, 0); 
while(startDate.getDayOfWeek() != DateTimeConstants.MONDAY) { 
    startDate = startDate.plusDays(1); 
} 

DateTime endDate = new DateTime(2013, 1, 1, 0, 0, 0, 0); 
Interval i = new Interval(startDate, weekPeriod); 
while(i.getStart().isBefore(endDate)) { 
    System.out.println("week : " + i.getStart().getWeekOfWeekyear() 
      + " start: " + df.format(i.getStart().toDate()) 
      + " ending: " + df.format(i.getEnd().minusMillis(1).toDate())); 
    i = new Interval(i.getStart().plus(weekPeriod), weekPeriod); 
} 
+0

¡Guau, muchas gracias! – user1412715

1

nunca utilizado Joda Hora. me gustaría hacer algo como esto:

  1. crear una clase que tiene la WeekNumber y dos DateTime (inicio, final)
  2. crear una lista de esta clase
  3. Iterar lo largo del año (semana por semana) y guarde la semana actual en la lista

Así lo haría con la api estándar del calendario de Java. Probablemente Joda Time es un poco más fácil, no sé.

+0

Probablemente usaría una tabla de base de datos en lugar de una clase, pero tiene la idea correcta. –

0

Joda-Time es en modo de mantenimiento

FYI, el proyecto Joda-Time está ahora en maintenance mode, con el equipo asesorando a la migración a las clases java.time. Ver .

Definir ‘semana’

Se puede definir una semana en diferentes maneras.

Supongo que se refiere al estándar ISO 8601 week. La semana número 1 tiene el primer jueves del año, comienza el lunes y el año de una semana tiene 52 o 53 semanas. Unos días al final o al comienzo del año calendario pueden aterrizar en el otro año basado en la semana.

java.time

El enfoque moderno utiliza los java.time clases, y su extensión encuentran en el proyecto ThreeTen-Extra.

De ThreeTen-Extra, utilice la clase YearWeek.

YearWeek start = YearWeek.of(2017 , 1) ; // First week of the week-based year 2017. 

Obtenga la cantidad de semanas en este año basado en la semana, 52 o 53.

int weeks = start.lengthOfYear() ; 

... o ...

int weeks = (start.is53WeekYear()) ? 53 : 52 ; 

bucle para cada semana del año. Para cada YearWeek, solicítelo para producir un LocalDate para el comienzo y el final de esa semana.

List<String> results = new ArrayList<>(weeks) ; 
YearWeek yw = start ; 
for(int i = 1 , i <] weeks , i ++) { 
    String message = "Week: " + yw + " | start: " + yw.atDay(DayOfWeek.MONDAY) + " | stop: " + yw.atDay(DayOfWeek.SUNDAY) ; 
    results.add(message) ; 
    // Prepare for next loop. 
    yw = yw.plusWeeks(1) ; 
} 

Sobre java.time

El marco java.time está incorporado en Java 8 y versiones posteriores. Estas clases suplantan a las viejas y problemáticas clases de fecha y hora legacy, como java.util.Date, Calendar, & SimpleDateFormat.

El proyecto Joda-Time, ahora en maintenance mode, recomienda la migración a las clases java.time.

Para obtener más información, consulte el Oracle Tutorial. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.

¿Dónde obtener las clases java.time?

El proyecto se extiende ThreeTen-Extra java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval, YearWeek, YearQuarter y more.

Cuestiones relacionadas