2012-08-08 12 views
7

¿Es posible calcular las semanas de un mes en jodatime?calcular semanas por un mes en jodatime

necesito algo como esto:

Mes: July

  • Semana del año 27; 1-7. Julio
  • Semana del año 28; 9-14. Julio
  • Semana del año 29; 16-21. Julio
  • Semana del año 30; 23-31. Julio

Mes: August

  • Semana del año 31; 1-4. Ago
  • Semana del año 32; 6-11. Ago
  • Semana del año 33; 13-18. Ago
  • Semana del año 34; 20-25. Ago
  • Semana del año 35; 27-31. Agosto

sé que puedo conseguir la semana del año en el tiempo joda como esto:

new LocalDate().weekOfWeekYear()

Pero No sé cómo conseguir las fechas relacionadas.

Respuesta

8

Para recuperar el rango de una semana, solo cree un objeto que apunte al primer y último día de la semana, luego simplemente retire el día del mes.

int weekOfYear = 32; 

LocalDate firstDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(1); 
LocalDate lastDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(7); 

System.out.println("Week of Year "+weekOfYear+"; "+firstDay.toString("d MMM")+" - "+lastDay.toString("d MMM")); 

También puede extraer el día como este:

int weekStart = firstDay.getDayOfMonth(); 
int weekEnd = lastDay.getDayOfMonth(); 

continuación, puede utilizar la misma técnica para recuperar las semanas en un mes también.

int firstWeekInMonth = new LocalDate().withMonthOfYear(month).withDayOfMonth(1).getWeekOfYear(); 
int lastWeekInMonth = new LocalDate().withMonthOfYear(month).dayOfMonth().withMaximalValue().getWeekOfYear(); 

Probablemente es posible que desee limitar la fechas de comienzo y final para mantenerse dentro del rango del mes, de lo contrario se podría conseguir cosas como '30 - 5 de SEP.

+0

Esto no sólo es incapaz de responda la pregunta (aunque proporciona una buena inspiración), pero contiene 2 errores: la lógica sugiere que weekEnd se debe derivar de lastDay, que no se usa, no firstDay; también, la respuesta se refiere a la variable "mes", que no está definida. Mis intentos de corregir los errores flagrantes (pero potencialmente confusos) fueron rechazados por los revisores gruñones. – Lambart

+0

@Lambart, de hecho, tienes razón.Repare los errores y agregué un párrafo que espero que responda mejor a la pregunta. No dejes que los editores te desanimen :) –

+0

buenas ediciones, y gracias por el estímulo. :) – Lambart

1

fijación de algunas variables:

int weekOfYear = 32; 

LocalDate firstDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(1); 
LocalDate lastDay = new LocalDate().withWeekOfWeekyear(weekOfYear).withDayOfWeek(6); 

int weekStart = firstDay.getDayOfMonth();  
int weekEnd = lastDay.getDayOfMonth(); 

System.out.println("Week of Year "+weekOfYear+"; "+weekStart+"-"+weekEnd+" "+month); 
1

Mi solución, teniendo en cuenta las otras respuestas

public List<Pair<LocalDate, LocalDate>> getWeeksInMonth(LocalDate data) { 

     int firstWeekInMonth = data.withDayOfMonth(1).getWeekOfWeekyear(); 
     int lastWeekInMonth = data.dayOfMonth().withMaximumValue().getWeekOfWeekyear(); 

     List<Pair<LocalDate, LocalDate>> weeks = new cicero.minhasfinancas.util.array.ArrayList<>(); 
     while (firstWeekInMonth <= lastWeekInMonth) { 

      LocalDate firstDay = new LocalDate().withWeekOfWeekyear(firstWeekInMonth).withDayOfWeek(1); 
      LocalDate lastDay = new LocalDate().withWeekOfWeekyear(firstWeekInMonth).withDayOfWeek(7); 
      weeks.add(new Pair<>(firstDay, lastDay)); 
      firstWeekInMonth++; 
     } 

     return weeks; 
    } 

    public class Pair<V1, V2>{ 

     V1 first; 
     V2 second; 

     public Pair(V1 first, V2 second) { 
      this.first = first; 
      this.second = second; 
     } 

     public V1 getFirst() { 
      return first; 
     } 

     public void setFirst(V1 first) { 
      this.first = first; 
     } 

     public V2 getSecond() { 
      return second; 
     } 

     public void setSecond(V2 second) { 
      this.second = second; 
     } 
    } 
0

Creo que esto también es un trabajo para encontrar cada semana

String[] weekDays = {today.withDayOfWeek(DateTimeConstants.MONDAY).getDayOfMonth() +"", 
      today.withDayOfWeek(DateTimeConstants.TUESDAY).getDayOfMonth()+ "", 
      today.withDayOfWeek(DateTimeConstants.WEDNESDAY).getDayOfMonth() + "", 
      today.withDayOfWeek(DateTimeConstants.THURSDAY).getDayOfMonth() + "", 
      today.withDayOfWeek(DateTimeConstants.FRIDAY).getDayOfMonth() +"", 
      today.withDayOfWeek(DateTimeConstants.SATURDAY).getDayOfMonth() +"", 
      today.withDayOfWeek(DateTimeConstants.SUNDAY).getDayOfMonth() +""}; 
Cuestiones relacionadas