2012-08-08 12 views
7

Ist es möglich, die Wochen von einem Monat in jodatime zu berechnen?Wochen für einen Monat in jodatime berechnen

Ich brauche etwas wie folgt aus:

Monat: Juli

  • Woche des Jahres 27; 1-7. Juli
  • Woche des Jahres 28; 9-14. Juli
  • Woche des Jahres 29; 16-21. Juli
  • Woche des Jahres 30; 23-31. Juli

Monat: August

  • Woche des Jahres 31; 1-4. Aug
  • Woche des Jahres 32; 6-11. Aug
  • Woche des Jahres 33; 13-18. Aug
  • Woche des Jahres 34; 20-25. Aug
  • Woche des Jahres 35; 27-31.
  • August

Ich weiß, dass ich die Woche des Jahres in joda Zeit wie diesen bekommen:

new LocalDate().weekOfWeekYear()

Aber ich weiß nicht, wie die damit verbundenen Termine zu bekommen.

Antwort

8

Um den Bereich einer Woche abzurufen, erstellen Sie einfach ein Objekt, das auf den ersten und letzten Tag der Woche zeigt, und ziehen Sie dann den Tag des Monats heraus.

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")); 

Sie können auch den Tag wie folgt extrahieren:

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

Sie können dann die gleiche Technik verwenden, um die Wochen in einem Monat als auch abzurufen.

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

Wahrscheinlich möchten Sie vielleicht die Start- und Enddaten im Bereich des Monats zu bleiben begrenzen, sonst könnte man die Dinge wie '30 - 5. September‘.

+0

Dies ist nicht nur nicht zu finden ist, arbeiten zu Beantworte die Frage (obwohl sie eine gute Inspiration liefert), aber sie enthält 2 Fehler: logisch bedeutet, dass weekEnd abgeleitet werden soll von lastDay, was nicht genutzt wird, nicht firstDay; Die Antwort bezieht sich auch auf die Variable "Monat", die nicht definiert ist. Meine Versuche, die eklatanten (aber möglicherweise verwirrenden) Fehler zu beheben, wurden von mürrischen Rezensenten zurückgewiesen. – Lambart

+0

@Lambart in der Tat hast du recht.Ich habe die Fehler behoben und einen Absatz hinzugefügt, der hoffentlich die Frage besser beantworten wird. Lassen Sie sich nicht von den Redakteuren runterholen :) –

+0

gute Bearbeitungen und vielen Dank für die Ermutigung. :) – Lambart

1

Festsetzung einige Variablen:

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

Meine Lösung, wenn man bedenkt die anderen Antworten

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

Ich denke, das auch jede Woche

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() +""}; 
Verwandte Themen