Wie konvertiert LocalDateTime zu GregorianCalendar?
Warum ist es möglich, übergeben eine LocalDateTime
Objekt in der ZonedDateTime.from()
Methode, wenn es nicht möglich ist zu analysieren, eine einfache datetime, wie folgt?
@Test
public void test() throws Exception {
GregorianCalendar.from(ZonedDateTime.from(LocalDateTime.parse("2016-08-31T23:00:59")));
}
Ergebnis:
java.time.DateTimeException: Unable to obtain ZonedDateTime from TemporalAccessor: 2016-08-31T23:00:59 of type java.time.LocalDateTime
at java.time.ZonedDateTime.from(ZonedDateTime.java:565)
- Fragen Sie, wie zu konvertieren, um ein
GregorianCalendar
oder sind Sie Fragen, warum es erlaubt Ihnen, um eine Umsetzung derTemporalAccessor
- Schnittstelle und nur einer beschwert sich in der Laufzeit? - GeorgianCalendar erfordert eine Zeitzone, also eigentlich können Sie tun
GregorianCalendar.from(ZonedDateTime.parse("2016-08-31T23:00:59+00:00"));
Angabe einer Zeitzone.ZonedDateTime.from
scheitern kann für verschiedene Arten von input und erwähnt, dass in der javadoc. - Das Diagramm zeigt Konvertierungen von alten Datum-Zeit-Klassen in java.die Zeit in meine Antwort zu Convert java.util.Datum, zu dem, was “java.Zeit" geben? die nützlich sein können. Außerdem finden Sie Beispiel-code Umwandlung in beide Richtungen.
- das ist ein wirklich tolles Diagramm!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beide LocalDateTime und ZonedDateTime implementiert die Schnittstelle namens Zeitliche, die sich TemporalAccessor.
LocalDateTime ist die Datum-Zeit-ohne Zeit-zone, in der ISO-8601-Kalender-system, wie 2007-12-03T10:15:30
ZonedDateTime ist Datum und Uhrzeit mit einem Zeit-zone, in der ISO-8601-Kalender-system, wie 2007-12-03T10:15:30+01:00 Europe/Paris.
Nun, wenn Sie sehen, die Umsetzung der
from(TemporalAccessor temporal)
Methode, die erwarten, dass die TemporalAccessor. Beide ZonedDateTime und LocalDateTime implementiert die Methode der super-Schnittstelle TemporalAccessor (Temporal erweitert TemporalAccessor) ist es normal (polymorphe Verhalten), um uns zu erlauben zu passieren, sowohl auf der Lokalen als auch in Zonen aufgeteilt, Datum, Zeit.Code:
Nun kommen wir zu deinem problem.
Übergeben Sie
LocalDateTime.parse("2016-08-31T23:00:59")
zu denfrom(TemporalAccessor temporal)
Methode. So das zeitliche ist nicht eine Instanz von ZonedDateTime, es kommtZoneId zone = ZoneId.from(temporal)
;So sind immer die Fehler, die seit der LocalDateTime nicht enthält, die
timezone.
Wie das Problem zu lösen?
Verwenden Sie die Zone Id mit der ZonedDateTime
Mit Junit testen
Müssen Sie liefern amp; zoneid als gut , ich werde schauen müssen, bis auf das Verhalten, warum das ist , werde ich Bearbeiten und posten, sobald ich es sehe
Diese Ergebnisse :
java.util.GregorianCalendar[time=1472664659000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Calcutta",offset=19800000,dstSavings=0,useDaylight=false,transitions=6,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2016,MONTH=7,WEEK_OF_YEAR=35,WEEK_OF_MONTH=5,DAY_OF_MONTH=31,DAY_OF_YEAR=244,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=5,AM_PM=1,HOUR=11,HOUR_OF_DAY=23,MINUTE=0,SECOND=59,MILLISECOND=0,ZONE_OFFSET=19800000,DST_OFFSET=0]
Bearbeitungen
Kam gerade über diesen thread (Nicht in der Lage zu erhalten ZonedDateTime von TemporalAccessor beim Parsen eines Datums)