Heim > Datenbank > MySQL-Tutorial > Warum gibt SimpleDateFormat.parse bei der Konvertierung von UNIX-Zeitstempeln in Datumsangaben eine andere Ausgabe aus als angegeben?

Warum gibt SimpleDateFormat.parse bei der Konvertierung von UNIX-Zeitstempeln in Datumsangaben eine andere Ausgabe aus als angegeben?

Linda Hamilton
Freigeben: 2024-10-30 03:06:28
Original
506 Leute haben es durchsucht

Why does SimpleDateFormat.parse output differently than specified when converting UNIX timestamps to dates?

SimpleDateFormatter.parse gibt anders aus als angegeben

Beim Konvertieren von UNIX-Zeitstempeln in Datumsangaben mit SimpleDateFormat kann es zu Abweichungen zwischen dem angegebenen Format und dem Format kommen Ausgabe.

Im gegebenen Beispiel besteht das Ziel darin, einen UNIX-Zeitstempel („a1527069600“) in ein Datum im Format „TT/MM/JJJJ hh:mm:ss a“ zu konvertieren. Die Verwendung von SimpleDateFormatter.format gefolgt von SimpleDateFormatter.parse führt jedoch zu einer anderen Ausgabe.

Ursache der Diskrepanz

Die Diskrepanz tritt auf, weil SimpleDateFormatter.parse eine Zeichenfolge in der exakten Reihenfolge erwartet Format, das bei der Instanziierung angegeben wurde („TT/MM/JJJJ hh:mm:ss a“). In diesem Fall gibt SimpleDateFormatter.format das Datum in einem anderen Format als dem erwarteten Eingabeformat aus, was dazu führt, dass der Analysevorgang fehlschlägt.

Lösung

Um dieses Problem zu vermeiden , wird empfohlen, keine Datumszeichenfolgen an MySQL-Datenbanken zu übergeben. Verwenden Sie stattdessen Datumsobjekte. Die moderne Java-API für Datum und Uhrzeit, java.time, bietet Klassen wie LocalDateTime, die die Datumsverarbeitung erleichtern.

Beispiel:

<code class="java">String ep = "a1527069600";
long epoch = Long.parseLong(ep.substring(1));
Instant inst = Instant.ofEpochSecond(epoch);
LocalDateTime ldt = inst.atZone(ZoneId.of("Asia/Calcutta")).toLocalDateTime();

System.out.println(ldt.toString()); // Output: 2018-05-23T15:30

PreparedStatement ps = myDatabaseConnection.prepareStatement(
        "insert into my_table (my_date_time) values (?)");
ps.setObject(1, ldt);</code>
Nach dem Login kopieren

Dieser Code konvertiert den UNIX Zeitstempel zu einem LocalDateTime, der direkt in die MySQL-Datenbank eingefügt werden kann.

Fazit:

Durch die Verwendung von java.time und die Übergabe von Datumsobjekten anstelle von Zeichenfolgen an MySQL, Sie können Formatierungsprobleme beseitigen und die Genauigkeit der Datumskonvertierung sicherstellen.

Das obige ist der detaillierte Inhalt vonWarum gibt SimpleDateFormat.parse bei der Konvertierung von UNIX-Zeitstempeln in Datumsangaben eine andere Ausgabe aus als angegeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage