Próbuję uzyskać numer tygodnia pełnego LOCALDATE w formacie:Get Tydzień Ilość LOCALDATE (Java 8)
dd.MM.yyy
ja nie znalazłem funkcji w Java 8 Data API wich zwraca numer tygodnia i próbowałem utworzyć algorytm, ale nie działał.
Próbuję uzyskać numer tygodnia pełnego LOCALDATE w formacie:Get Tydzień Ilość LOCALDATE (Java 8)
dd.MM.yyy
ja nie znalazłem funkcji w Java 8 Data API wich zwraca numer tygodnia i próbowałem utworzyć algorytm, ale nie działał.
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());
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.
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ę: –
@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"). –
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. –
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. –
Brak Locale.ISO, ale jest 'WeekFields.ISO' –