Frage

Diese Frage bereits eine Antwort hier:

Ich habe eine Zeichenfolge date "2010-12-15T16: 26: 49,841 bis 08: 00" und ich brauche es zu einem GregorianCalendar in Java zu konvertieren. Wie Sie das tun?


Lösung von Jesper Antwort

-Code für die Lösung mit joda Zeit:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ").withOffsetParsed();
DateTime date = formatter.parseDateTime("2010-12-15T16:26:49.841-08:00");
War es hilfreich?

Lösung

Leider ist die Standard SimpleDateFormat Klasse nicht verarbeiten kann ISO 8601 sehr gut. Insbesondere kann es nicht die : behandeln, die in der Zeitzone am Ende versetzt ist.

Was Sie tun können, ist manuell die : aus dem Offset-Zeitzone entfernen, so dass Sie eine Zeichenfolge, die aussieht wie diese:

2010-12-15T16:26:49.841-0800

(beachten Sie, dass die Zeitzone Offset -0800 statt -08:00). Dann können Sie es mit SimpleDateFormat mit dem Format yyyy-MM-dd'T'HH:mm:ss.SSSZ analysieren.

Aber es ist besser, die beliebte Joda-Time Bibliothek Griff Zeiten und Daten zu verwenden; es ist viel besser als die Standard-Java-API-Datum und Kalender-Klassen und Griffe ISO 8601 richtig.

Andere Tipps

Mit Simple findet javadocs hier:

konvertiert dann die Date-Kalender. Schauen Sie sich auf viele Beispiele hier:

Sie können mit diesem Stück Code versuchen

DateTimeFormatter formatter =
    DateTimeFormat.forPattern("your pattern").withOffsetParsed();
DateTime dateTime = formatter.parseDateTime("your input");
GregorianCalendar cal = dateTime.toGregorianCalendar();

Dies wird Ihnen auf jeden Fall den gregorianischen Kalender Object

 String dateTimeString="2010-12-15T16:26:49.841-08:00"; 

 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

 DateTime dateTime = formatter.parseDateTime(dateTimeString);

 GregorianCalendar cal = dateTime.toGregorianCalendar();

Die anderen Antworten sind richtig, aber jetzt veraltet. Sie nutzen lästige alte Klassen jetzt durch den java.time Rahmen verdrängte.

Mit java.time

Die Eingabezeichenfolge geschieht mit ISO 8601 Standardformatierung zu erfüllen. Also keine Notwendigkeit, eine Formatierung Muster angeben, wie die java.time Klassen ISO 8601 standardmäßig verwenden, wenn das Parsen / Erzeugen von Zeichenketten.

Die Eingabezeichenfolge enthält eine Offset-from-UTC, so dass wir als OffsetDateTime analysieren.

String input = "2010-12-15T16:26:49.841-08:00" ;
OffsetDateTime odt = OffsetDateTime.parse( input );

Wenn Sie eine bestimmte Zeitzone im Auge haben, sondern als ein bloße Offset-from-UTC gilt das.

ZoneId zoneId = ZoneId.of( "America/Los_Angele" );
ZonedDateTime zdt = odt.atZone( zoneId );

GregorianCalendar

Sie sollten die alten Datum-Zeit-Klassen wie GregorianCalendar vermeiden. Aber wenn Sie mit altem Code zu interagieren dürfen noch nicht für java.time aktualisiert wird, können Sie konvertieren. Mit neuen Methoden hinzugefügt, um die alten Klassen für die Konvertierung. Für mehr Informationen und ein geschicktes Diagramm finden Sie meine Frage und Antwort .

Calendar cal = java.util.GregorianCalendar.from( zdt );  // Do such conversions out of java.time only if absolutely necessary.

Über java.time

Die java.time Rahmen in Java 8 und später gebaut. Diese Klassen verdrängen die alten lästigen Datum Zeitklassen wie java.util.Date, .Calendar & java.text.SimpleDateFormat.

Die Joda-Time Projekt nun in Wartungsmodus , rät Migration zu java.time.

Um mehr zu erfahren, finden Sie in der Oracle Tutorial . Und sucht Stack-Überlauf für viele Beispiele und Erklärungen.

Ein großer Teil der java.time Funktionalität zurückportiert zu Java 6 & 7 in ThreeTen-Backport und weiter angepasst Android in ThreeTenABP .

Das ThreeTen-Extra Projekt erstreckt java.time mit zusätzlichen Klassen. Dieses Projekt ist eine Bewährungsprobe für eine mögliche zukünftige Ergänzungen java.time. Sie können einige nützliche Klassen hier wie Interval, YearWeek, YearQuarter und vieles mehr finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top