2014-06-18 10 views
6

Ist es möglich, ein Datum zu analysieren und die Woche des Monats mit Joda-Time extrahieren. Ich weiß, dass es möglich ist, es für die Woche des Jahres zu tun, aber ich kann nicht finden, wie/wenn es möglich ist, die Woche des Monats zu extrahieren.Woche des Monats mit Joda-Time

Beispiel: 2014-06_03 wo 03 die dritte Woche dieses Monats ist

DateTime dt = new DateTime(); 
String yearMonthWeekOfMonth = dt.toString("<PATTERN for the week of month>"); 

habe ich versucht, das Muster „yyyyMMW“, aber es wird nicht akzeptiert.

Antwort

4

Die aktuelle joda-time Version unterstützt nicht die Woche des Monats, daher sollten Sie eine Workaround verwenden.
1) Zum Beispiel können Sie das nächste Verfahren verwenden:

static DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MM_'%d'"); 
    static String printDate(DateTime date) 
    { 
     final String baseFormat = FORMATTER.print(date); // 2014-06_%d 
     final int weekOfMonth = date.getDayOfMonth() % 7; 
     return String.format(baseFormat, weekOfMonth); 
    } 

Verbrauch:

DateTime dt = new DateTime(); 
String dateAsString = printDate(dt); 

2) Sie können Java verwenden 8, weil Java API Woche des Monats Feld unterstützt.

java.time.LocalDateTime date = LocalDateTime.now(); 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM_W"); 
    System.out.println(formatter.format(date)); 
+0

Danke für die Antwort, schließlich mit Simple den Trick für mich getan hat, aber es ist gut zu wissen, dass es von Java 8 – tbo

+2

Korrektur unterstützt wird für die erste Lösung: 'final int weekOfMonth = (date.getDayOfMonth()/7) + 1;' – snaikar

5

Diese Option in Joda ist wahrscheinlich schöner:

Weeks.weeksBetween(date, date.withDayOfMonth(1)).getWeeks() + 1 
+0

Nur darauf achten, dass, wenn 'date> then.withDayOfMonth (1)' code oben negative Werte liefert, zumindest für ' joda-time 2.9.1', weiß nicht, ob es Bug oder beabsichtigtes Verhalten ist, aber laut API sollte es '.. (Start, Ende)', 'öffentliche statische Wochen weeksBetween (ReadablePartial start, Re adablePartial Ende) ', http://joda-time.sourceforge.net/apidocs/org/joda/time/Weeks.html#weeksBetween (org.joda.time.ReadableInstant) – Anatoly

+0

Sie können immer Weeks.weeksBefore (date1.isBefore (date2)? Datum1: Datum2, Datum1.isBevor (Datum2)? date2: date1)). getWeeks() + 1 – FrankMonza