2017-03-17 5 views
0

Ich habe eine Datumsstring im UTC-Format mit Zone. Ich muss es in SQL Zeitstempel mit +/- Zone in Zeit unter Verwendung Java 8.0 z.Verdeckte UTC Datum Zeichenfolge zu SQL Zeitstempel mit Java 8

2016-10-14T10:12:18.000+02:00 Bedürfnisse umgewandelt 2016-10-14T08:12:18.000+00:00 oder 2016-10-14T8:12:18.000Z

String utcDate = "2016-10-14T10:12:18.100+02:00"; 
ZonedDateTime result = ZonedDateTime.parse(utcDate, DateTimeFormatter.ISO_DATE_TIME); 
System.out.println("Parsed: " + result); 

Output:

Parsed: 2016-10-14T10:12:18.100+02:00 

Es ist nicht fügen Sie die Zone +02: 00 to Date.

+3

Zunächst einmal denke ich, du hast missverstanden, was "UTC" bedeutet - es ist kein * Format * ... es ist ein Referenzrahmen, der hauptsächlich für Zeitzonen verwendet wird. Die Zeichenfolge "2016-10-14T10: 12: 18.000 + 02: 00" hat einen Offset von 2 Stunden von UTC. –

+0

Mein Schlechter. Ich meine ISO-Format mit Zeitzonen. Ich muss es mit +/- Offset in UTC umwandeln. –

+0

@AtulKumar Bitte bearbeiten Sie Ihre Frage, um Ihren Fehler zu beheben, und fügen Sie Klarheit hinzu. Bitte erläutern Sie, was Sie mit "SQL Timestamp" meinen, da Ihr Beispielcode nicht verwandt scheint. –

Antwort

1

Nun, Sie tun nichts, um den Wert zu konvertieren - Sie verwenden eine ZonedDateTime, so dass es die Zeitzone (zumindest der Offset), die zur Verfügung gestellt wurde. (I OffsetDateTime für diese eher als ZonedDateTime verwenden würde, wie man eigentlich keine Zeitzone haben.)

Sie könnten entweder verwenden withZoneSameInstant:

ZonedDateTime utc = result.withZoneSameInstant(ZoneOffset.UTC); 

oder umbauen zu einem Instant:

Instant instant = result.toInstant(); 

(und formatieren Sie dann natürlich, natürlich).