2014-09-24 12 views

Odpowiedz

20

Jedno małe ostrzeżenie. Nie testowałem tego jeszcze, ale patrząc na dokumentacji API WeekFields i LocalDate.get, należy zrobić coś takiego:

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

Uwaga na Locale.getDefault(). W niektórych miejscach (np. W Kanadzie) może zwrócić tydzień rozpoczynający się w niedzielę. Użyj "Locale.ISO" na tygodnie zaczynające się w poniedziałek. –

+1

Brak Locale.ISO, ale jest 'WeekFields.ISO' –

24

Odpowiedź Mark Rotteveel jest prawie w prawo i znowu przykładem, jaki rodzaj potencjału tam zamieszanie jest w klasie WeekFields (podobne brzmiące nazwy metod, ale odbiegające od intuicyjnego użycia cywilnego). Prawo wymaga innego kodu pola:

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

Zobacz także podobną debatę na ten SO-post, zwłaszcza dyskusji i komentarzy na temat odpowiedzią @kleopatra.

+0

Zaktualizowałem swoją odpowiedź na podstawie twojej. Nie miałem tutaj dostępu do Java 8, więc musiałem zgadywać (i wygląda na to, że nie przeczytałem ['WeekFields'] (http://docs.oracle.com/javase/8/docs/api /java/time/temporal/WeekFields.html) dokładnie dokumentuje klasę, tak jak wyjaśnia tę różnicę: –

+0

@MarkRotteveel OK, teraz mam swoją wersję ;-) Dla mnie nazwa "weekOfWeekBasedYear" jest zbyt techniczna i pozostaje irytująca . Nawet papier ISO-8601 nie zawiera tego terminu (po prostu używa terminów takich jak "tydzień kalendarzowy" lub "data tygodnia"). –

+1

Uwaga na Locale.getDefault(). W niektórych miejscach (np. W Kanadzie) może zwrócić tydzień rozpoczynający się w niedzielę. Użyj "Locale.ISO" na tygodnie zaczynające się w poniedziałek. –

Powiązane problemy