2016-05-19 14 views
1

Ich muss eine Datumszeichenfolge im folgenden Format analysieren.Java analysiert DateTime und ignoriert Zeitzone

„2016.05.19 13.07.15 PDT“

Mein Datenbank-Server in ET ist, aber ich mag den Zeitstempel speichern 2016-05-19 13:07:15 in meiner Datenbank, ohne die Zeitzone und ohne Konvertierung es zu ET. Im Wesentlichen möchte ich die PDT in der Zeichenfolge ignorieren.

Derzeit ich meinen String in ein ZonedDateTime Objekt analysiere und dass in meiner Datenbank zu einem TIMESTAMP-Datentyp zuordnen, aber Hibernate ist eine Konvertierung auf dem Back-End zu tun, da sie weiß, dass meine ZonedDateTime in PDT ist. Also, das Datum in dem obigen Beispiel landet in meiner Datenbank als 2016-05-19 16:07:15 statt was ich will, 2016-05-19 13:07:15 gespeichert.

Eine Idee, die ich gedacht hatte, der war nur die PDT abstreifen vom Ende des Strings, analysieren sie dann als LocalDateTime, aber bevor ich das tue, ich wollte sehen, ob es eine Möglichkeit war, um im wesentlichen nur Ignoriere die Zeitzone von ZonedDateTime, oder analysiere die oben gezeigte Zeichenkette zu einem LocalDateTime (oder einem anderen Java-Zeitobjekt, das sich nicht um die Zeitzone kümmert), ohne die Konvertierung von PDT zu ET tatsächlich durchzuführen.

Gibt es eine Möglichkeit, dies zu erreichen, ohne die Zeitzone vor dem Parsen tatsächlich von der Zeichenfolge abzuziehen?

+1

Es scheint einige StackOverflow-Fragen und Antworten zu geben, die das Analysieren von Date-Strings beim Ignorieren von Zeitzonen beschreiben. Hast du irgendwas von ihnen probiert? Was hat nicht funktioniert? – DavidS

+0

Es scheint einige in C# zu geben und einige, die nicht auf die java.time API verweisen. Wenn Sie einen finden könnten, der java.time verwendet, wäre es wunderbar, wenn Sie einen Link darauf posten könnten. –

+0

Eigentlich denke ich, dass Ihre Frage und die akzeptierte Antwort eine der besseren Versionen sind, besonders weil Java 8 2014 veröffentlicht wurde, daher sind einige ältere Antworten komplizierter. – DavidS

Antwort

3

Wie wäre es damit?

String datestring = "2016-05-19 13:07:15 PDT"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss zzz"); 

LocalDateTime localDateTime = LocalDateTime.from(formatter.parse(datestring)); 
System.out.println(localDateTime); 
// Output: 2016-05-19T13:07:15 

Edit: Als Alternative, wenn Sie bereits ein ZonedDateTime Objekt haben, das funktioniert auch (und entfernt die Zeitzone):

LocalDateTime.from(zonedDateTime); 
+0

Ah, das funktioniert. Ich nahm an, dass das Parsen als 'LocalDateTime' es automatisch in ET umwandeln würde, da die lokale Zeit des Servers ET ist, und dass ich' 2016-05-19 16: 07: 15' bekommen würde, aber es gibt mir genau was Ich will. Vielen Dank. –

+1

Auch habe ich diesen alternativen Weg verwendet: 'LocalDateTime.parse (Datumszeichenfolge, Formatierer);' –

0

Der beste Weg, mit Datum und Uhrzeit in verschiedenen Zeitzonen zu behandeln ist das Datum und die Uhrzeit in UTC (GMT +0) zu speichern, und zum Zeitpunkt des Abrufs sollte es basierend auf dem Anforderer in die gewünschte Zeitzone konvertiert werden. Dies wird Ihnen helfen, die Datumszeitfunktion in Zukunft zu erweitern, wenn Sie mit mehreren Zeitzonen arbeiten müssen.