Ich habe versucht, Woche des Jahres aus einem ISO-8601 Datumsformat String-Eingabe zu berechnen. Anfangs versuchte ich dies mit java.time.ZonedDateTime, aber es gibt ein falsches Ergebnis für das Eingabedatum - 2-Jan-2049. Dann habe ich versucht mit Kalender-API es gibt auch falsche Antwort für 31-Dec-2049.Compute Woche des Jahres Probleme mit ZonenedDateTime und Kalender API
ich die Probe Testcode
public class ZonedDateTimeTest {
public static void main(String[] args) throws InterruptedException {
System.out.println("======================================");
String instantStr1 = "2049-01-02T03:48:00Z";
printYearAndWeekOfYear(instantStr1);
System.out.println("======================================");
String instantStr2 = "2049-12-31T03:48:00Z";
printYearAndWeekOfYear(instantStr2);
System.out.println("======================================");
}
public static void printYearAndWeekOfYear(String ISODate) {
System.out.println("Date provided -> " + ISODate);
ZonedDateTime utcTimestamp = parseToInstant(ISODate).atZone(ZoneOffset.UTC);
int year = utcTimestamp.getYear();
int weekOfYear = utcTimestamp.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR);
System.out.println("Using ZonedDateTime API:: Year " + year + " weekOfYear " + weekOfYear);
Date d1 = Date.from(parseToInstant(ISODate));
Calendar cl = Calendar.getInstance();
cl.setTime(d1);
int year1 = cl.get(Calendar.YEAR);
int weekOfYear1 = cl.get(Calendar.WEEK_OF_YEAR);
System.out.println("Using Calendar API:: Year " + year1 + " weekOfYear " + weekOfYear1);
}
public static Instant parseToInstant(String ISODate) {
return DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(ISODate, Instant::from);
}
}
Ausgabe von Code über
======================================
Date provided 2049-01-02T03:48:00Z
Using ZonedDateTime API: Year 2049 weekOfYear 53
Using Calendar API: Year 2049 weekOfYear 1
======================================
Date provided 2049-12-31T03:48:00Z
Using ZonedDateTime API: Year 2049 weekOfYear 52
Using Calendar API: Year 2049 weekOfYear 1
======================================
Bitte setzen Sie diesen Kommentar * in die Frage * - logisch ist das Teil der Frage. Es ist auch bedauerlich, dass Sie keine Zeitzone irgendwo im "Kalender" -Teil angegeben haben, was sich leicht auf die Ergebnisse auswirken könnte. –
Bitte beenden Sie die Formatierung. Ich habe Ihre Code-Formatierung jetzt zweimal korrigiert, und beide Male haben Sie sie rückgängig gemacht. Ich habe die Ergebnisse dann neu formatiert, damit sie leichter zu lesen sind, und Sie haben es wieder rückgängig gemacht. –