„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 09.11.2024
Durchsuche:189

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 können Diskrepanzen zwischen dem angegebenen Format und dem angegebenen Format auftreten 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 vereinfachen.

Beispiel:

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);

Dieser Code konvertiert den UNIX-Zeitstempel in einen 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 können Sie Formatierungsprobleme beseitigen und die Genauigkeit der Datumskonvertierung sicherstellen.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3