Ich weiß, dass das Beantworten einer Frage dieses alte eine Nekromantie ist, aber die akzeptierte Antwort (durch lschin) hat einen Fehler - während es meistens den richtigen Wert zurückgibt, wird es manchmal einen falschen zurückgeben, abhängig davon, wann Berechnung wurde durchgeführt. Zum Beispiel:
%Vor% Wenn Sie die oben genannten Schritte am 28. Dezember 2014 ausführen, erhalten Sie den korrekten Wert von 52 .
Wenn derselbe Code jedoch nur einen Tag später am 29. Dezember 2014 ausgeführt wird, wird der Wert von 53 zurückgegeben. Das ist offensichtlich ein Problem, weil ein bestimmtes Jahr eine konstante Anzahl von Wochen hat (ganz zu schweigen von der Tatsache, dass Sie nicht wollen, dass Ihre Methoden nur zeitweise funktionieren). Sie können dies testen, indem Sie Ihr Systemdatum ändern oder ein festes Datum anstelle von new Date()
verwenden.
Das Problem hier ist weekOfWeekyear()
, das den gegebenen Jahrwert erhöhen kann, wenn new DateTime()
ein nahes Jahresenddatum zurückgibt. Dies ist kein Problem, wenn das aktuelle und das nächste Jahr beide die gleiche Anzahl von Wochen haben, aber ansonsten ein Problem darstellen. Um dies zu korrigieren, verwenden Sie:
Dies stellt sicher, dass Sie bei diesen seltenen Gelegenheiten nicht das Inkrement pro Jahr ändern und konsistent korrekte Ergebnisse erhalten.
... oder ...
%Vor%Das Joda-Time Projekt ist jetzt in Wartungsmodus , wobei das Team die Migration auf die java.time Klassen.
Was ist deine Definition von Woche? Enthält Woche 1 den 1. Januar? Oder enthält Woche # 1 einen bestimmten Wochentag wie Sonntag? Ist Woche 1 die erste Woche, die nur Tage des neuen Jahres enthält? Eine andere Definition?
Wenn Ihre Definition mit dem Standard ISO 8601 übereinstimmt, würde dies bedeuten, dass Woche 1 den ersten Donnerstag des Kalenders enthält Jahr und Montag beginnt jede Woche. So gibt es entweder 52 oder 53 Wochen im Jahr. Und die letzten oder ersten Tage des Kalenders können im vorherigen / nächsten Kalenderjahr landen.
YearWeek
class Fügen Sie für Standardwochen die Bibliothek ThreeTen-Extra
zu Ihrem Projekt hinzu. Diese Klassen erweitern die Funktionalität der java.time-Klassen, die in Java 8 und höher integriert sind.
Erhalten Sie eine Woche von Ihrer gewünschten Wochennummer.
%Vor%Vielleicht möchten Sie die aktuelle Jahreswoche.
%Vor%Erhalten Sie die Anzahl der Wochen in diesem Jahr, entweder 52 oder 53.
%Vor%Oder fragen Sie einfach, ob dieses Jahr 53 Wochen hat.
%Vor% Das Framework java.time ist in Java integriert 8 und später. Diese Klassen ersetzen die problematischen alten Legacy Datum-Uhrzeit-Klassen wie java.util.Date
, Calendar
, & amp; SimpleDateFormat
.
Das Joda-Time Projekt, jetzt in Wartungsmodus , rät Migration zum java.time Klassen.
Weitere Informationen finden Sie im Oracle-Lernprogramm . Und suchen Sie nach Stack Overflow für viele Beispiele und Erklärungen. Spezifikation ist JSR 310 .
Wo erhalten Sie die Klassen java.time?
Das ThreeTen-Extra -Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Erweiterungen von java.time. Hier finden Sie einige nützliche Klassen wie Interval
, < a href="http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/YearWeek.html"> YearWeek
, YearQuarter
und mehr .
Tags und Links jodatime max week-number