2013-02-07 23 views
16

Wie kann ich das folgende Format erhalten:JodaTime Datum- und ISO8601 GMT Datumsformat

2015-01-31T00:00:00Z 

(ISO8601 GMT Datumsformat)

Aus einem Datetime-Objekt in joda Zeit (Java)? Z.B.

DateTime time = DateTime.now(); 
String str = // Get something like 2012-02-07T00:00:00Z 

Vielen Dank! :)

+3

Wie dies nicht klar ist? Er hat genau definiert, was er will. – vikingsteve

Antwort

28

Die JODA Javadoc zeigt an, dass toString für DateTime gibt das Datum in ISO8601. Wenn Sie alle Zeitfelder auf Null gesetzt haben müssen, tun Sie dies:

final DateTime today = new DateTime().withTime(0, 0, 0, 0); 
System.out.println(today); 

Das wird Millisekunden in der Ausgabezeichenfolge enthalten. Um sie los zu werden, müssten Sie den Formatierer verwenden, den @jgm hier vorschlägt.

Wenn Sie es wollen, um das Format passen Sie (mit dem wörtlichen Z Charakter) in diesem Beitrag nicht fragen, das funktionieren würde:

System.out.println(today.toString(DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'"))); 

Wenn Sie den Wert müssen UTC sein, initialisieren es so :

final DateTime today = new DateTime().withZone(DateTimeZone.UTC).withTime(0, 0, 0, 0); 
+0

Edit: das funktioniert perfekt. –

+1

Sollte es ein zweites einfaches Zitat nach ': ss'Z '' geben? – spuder

+0

Was passiert, wenn die Zeichenfolge einen Offset enthält, muss ich die Zeichenfolge analysieren, um eine Datumszeit ohne einen Offset' DateTime heute = neue DateTime ("2016-07-11T05: 04: 30-05: 30"; System.out.println (today.toString (DateTimeFormat.fürPattern ("yyyy-MM-dd'T'HH: mm: ss"))) ; 'gibt ein Ergebnis wie dieses "2016-07-11T05: 34: 30" wo das Feld min geändert wird @petter kjelkenes – striker

2

eine DateTimeFormatter ein:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ"); 
formatter.print(time); 
3

Verwendung ISODateTimeFormat

DateTime dt = new DateTime(); 
DateTimeFormatter fmt = ISODateTimeFormat.dateTimeNoMillis(); 
String str = fmt.print(dt); 
+0

Beachten Sie, dass ISODateTimeFormat.dateTime() in ZZ nicht Z endet. Es gibt einen Unterschied (ZZ fügt einen Doppelpunkt hinzu). – jgm

+0

Obwohl es absolut nicht klar ist, worüber petter genau nachfragt, unterscheidet sich Ihr Beispiel von seinem Beispiel: Es enthält Millisekunden in der Ausgabe und verwendet die Standardzeitzone anstelle von UTC. – jarnbjo

4

@jgm In dem Dokument wird beschrieben ISODateTimeFormat.dateTime()

Gibt einen Formatierer zurück, der ein vollständiges Datum und eine Uhrzeit kombiniert, getrennt durch 'T' (JJJJ-MM-TT'T'HH: mm: ss.SSSZZ).

, aber wenn Sie die Zeitzone eingestellt, zum Beispiel

DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); 
System.out.println(fmt.print(new DateTime().toDateTime(DateTimeZone.UTC))); 

es endet in Z.

+0

Oder auch: 'fmt. Drucken (DateTime.now (DateTimeZone.UTC)) ' – vikingsteve

Verwandte Themen