2016-12-09 4 views
0

I Zeitstempel als String in einem Strom erhalten und sie haben das Format "2016-12-08 05:44:48 <timezone like IST, UTC>" und "2016-12-08 05:44:48 <timezone like +0000>"Simple Parse ist Zeit ändert sich je nach Zeitzone

ich die Zeichenfolge java.sql.Timestamp konvertieren wollen, so schrieb ich eine Funktion als

private static Timestamp convertToTimestamp(String s) throws ParseException{ 
    String dateFormat = new String("yyyy-MM-dd hh:mm:ss z"); 
    SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); 
    Date d = sdf.parse(s); 
    return new Timestamp(d.getTime()); 
} 

folgt, wenn I

Timestamp t = convertToTimestamp("2016-12-08 05:44:48 UTC"); 
System.out.println(t); 

Der Ausgang ausgeführt ist 2016-12-08 11:14:48.0

012.

Es wird automatisch in IST konvertiert (wahrscheinlich mein JVM-Standard). Wie wird die Änderung durchgeführt, so dass die Ausgabezeit nicht in IST geändert wird und die Eingabe gleich ist?

Antwort

1

Java java.util.Date und java.sql.Timestamp speichern keine Zeitzone.

Sie verfolgen immer Zeit in UTC.

Beim Analysieren einer Datumszeichenfolge, die eine Zeitzone enthält, wird die Zeichenfolge von der angegebenen Zeitzone in UTC korrekt analysiert und angepasst.

Beim Parsen einer Datumszeichenfolge ohne Zeitzone wird die Zeichenfolge in der Standardzeitzone der JVM analysiert und in UTC konvertiert, sofern dem Datumsparser nicht explizit eine andere Zeitzone zugewiesen wurde (normalerweise SimpleDateFormat).

Wenn Anzeigen (aka Formatierung) ein Date/Timestamp, wird es in dem Standard-Zeitzone JVM angezeigt, sofern nicht anders angegeben.

Die Date/Timestamp Objekte nicht Speicher eine Zeitzone kann, damit sie sich nicht daran erinnern, was die ursprüngliche Zeitzone war.

Wenn Sie das brauchen, verwenden Sie Java 8 ZonedDateTime.

1

Sie haben die Zeitzone zu ignorieren, wenn das Datum Parsen

new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
Verwandte Themen