2014-09-24 7 views
11

Ich versuche, die Woche Anzahl der Volllocaldate mit dem Format zu erhalten:Get Woche Anzahl der LOCALDATE (Java 8)

dd.MM.yyy 

Ich habe nicht eine Funktion in der Java 8 Datum API Weicht gefunden gibt die Wochennummer zurück und ich habe versucht einen Algorithmus zu erstellen, aber es hat nicht funktioniert.

Antwort

20

Eine kleine Warnung. Ich habe dies noch nicht getestet, aber in der API-Dokumentation von WeekFields suchen und LocalDate.get, sollten Sie so etwas wie tun:

LocalDate date = ...; 
// Or use a specific locale, or configure your own rules 
WeekFields weekFields = WeekFields.of(Locale.getDefault()); 
int weekNumber = date.get(weekFields.weekOfWeekBasedYear()); 
+4

Vorsicht bei Locale.getDefault(). An einigen Orten (z. B. Kanada) kann es eine Woche zurückgeben, die an einem Sonntag beginnt. Verwenden Sie "Locale.ISO" für Wochen ab einem Montag. –

+1

Es gibt kein Locale.ISO, aber es gibt 'WeekFields.ISO' –

24

Die Antwort von Mark Rotteveel ist fast richtig und wieder ein Beispiel, welche Art von Verwirrung Potenzial ist in der Klasse WeekFields (ähnlich klingende Verfahren Namen, aber abweichend von der intuitiven zivile Nutzung). Der richtige Code erfordert ein anderes Feld:

LocalDate date = LocalDate.now(); 
TemporalField woy = WeekFields.of(Locale.getDefault()).weekOfWeekBasedYear(); 
int weekNumber = date.get(woy); 

Siehe auch ähnliche Debatte über diese SO-post, vor allem die Diskussion und Kommentare über die Antwort von @kleopatra.

+0

Ich habe meine Antwort basierend auf Ihrer aktualisiert. Ich hatte hier keinen Zugriff auf Java 8, also musste ich raten (und es sieht so aus, als hätte ich die ['WeekFields'] nicht gelesen (http://docs.oracle.com/javase/8/docs/api) /java/time/temporal/WeekFields.html) class Dokumentation zu genau, wie es diesen Unterschied erklärt –

+0

@MarkRotteveel OK, Sie haben jetzt meine upvote ;-) Für mich ist der Name "weekOfWeekBasedYear" zu technisch und bleibt ärgerlich . Selbst das ISO-8601-Papier enthält diesen Begriff nicht (er verwendet nur Begriffe wie "Kalenderwoche" oder "Wochentag"). –

+1

Vorsicht bei Locale.getDefault(). An einigen Orten (z. B. Kanada) kann es eine Woche zurückgeben, die an einem Sonntag beginnt. Verwenden Sie "Locale.ISO" für Wochen ab einem Montag. –

Verwandte Themen