2017-05-26 1 views
2

Ich möchte das Datum "2017-03-29 18: 17: 12 + 00" erstellen, aber ich bekomme das folgende Format während unter Verwendung des Formats,Was ist das Datumsformat für "2017-03-29 18: 17: 12 + 00"

public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ssZ"; 

2017-02-28 11:12:31+0000 

ich brauche das Format von "2017.03.29 18: 17: 12 + 00".

Wie bekomme ich das? Was ist das Format?

liefern bitte Ihre Eingaben

Antwort

1

Versuchen Sie X intead von Z in Ihrer Formatzeichenfolge.

4

Versuchen X die ISO 8601 time zone

public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ssX"; 
+1

Vielen Dank! es funktioniert wie erwartet! – SST

+1

Schließen, aber [ISO 8601] (https://en.m.wikipedia.org/wiki/ISO_8601) ist ein Standard, der Textformate für Datum/Uhrzeit-Zeichenfolgen definiert. Um jedoch dem Standard zu entsprechen, muss diese Zeichenfolge ein "T" in der Mitte anstelle eines SPACE verwenden. Und eine Zeitzone ist hier nicht beteiligt, nur ein [Offset-from-UTC] (https://en.m.wikipedia.org/wiki/UTC_offset) von Null, was [UTC] bedeutet (https: //en.m .wikipedia.org/wiki/Coordinated_Universal_Time) selbst. Eine Zeitzone ist ein "Kontinent/Region" wie "Amerika/Montreal", der eine Geschichte der Änderungen des von einer bestimmten Region verwendeten Offset angibt. –

0

Wenn Sie JDK 8 java.time API verwenden, werden Sie das gewünschte Format (ISO 8601) standardmäßig erhalten.

System.out.println(OffsetDateTime.now(ZoneId.systemDefault())); // 2017-05-26T16:20:42.821+05:30 
+0

Schließen! Du hast ein T drin, das ich nicht sehen konnte, dass das OP fragt (natürlich sollte er/sie trotzdem die modernen Klassen verwenden, auch sie können die Saite ohne das T erzeugen). –

+1

Um das T zu entfernen, verwenden Sie entweder '.replace ('T', '')' in der Zeichenfolge oder verwenden Sie '.format (DateTimeFormatter.ofPattern (" yyyy-MM-dd HH: mm: ssX ") on die 'OffsetDateTime' (habe ich auch noch nicht getestet) –

0

Ich würde sicherstellen, immer die ISO8601 zu verwenden.

Wie Shazin angegeben, können Sie Ihr Z mit X ersetzen, um die Annahme eines Datums durchzuführen.

Als Ergänzung würde ich vorschlagen, die OffsetDateTime API wie folgt zu verwenden:

OffsetDateTime time = OffsetDateTime.parse(YOUR_DATE_STRING); 

das Ihnen ein OffsetDateTime Objekt geben wird, mit denen Sie die richtigen Zeitzone arbeiten können. Auch wenn Sie die Eingabe in Ihrer Zeitzone oder die UTC-Zeitzone konvertieren möchten, können Sie

time.atZoneSameInstant(ZoneId.systemDefault()); 
0

Hinweis verwenden, die nicht alle Zeitzonen von UTC durch eine ganze Zahl von Stunden verschoben. Also, wenn Standards erstellt wurden, dachte niemand, dass es eine Forderung sein würde, die Zeitverschiebung als nur 2 Ziffern zu drucken.

Und wahrscheinlich ist der Grund, warum „Z“ als Zeitverschiebung Platzhalter „+“ umgewandelt wird, oder „-“ Zeichen, und nur vier Ziffern.

Ich denke, die Lösung ist:

  • die Daten/Zeit-String mit 4-stelligen Zeitverschiebung Teil erzeugen,
  • die letzten zwei Ziffern abgeschnitten.

Aber beachten Sie, dass in einigen Fällen, z.B. Afghanistan (4h 30m) oder Central Australia (10h 30m) wird diese zweistellige Zeitverschiebung ungenau sein.

+0

Es ist machbar, aber aus Gründen, die du schön erklärt hast, solltest du zumindest überprüfen, ob die letzten beiden Ziffern '00' sind, bevor du sie abschneidest. –

Verwandte Themen