Heim > Datenbank > MySQL-Tutorial > Warum erzeugt SimpleDateFormat.parse beim Konvertieren von UNIX-Zeitstempeln eine unerwartete Ausgabe?

Warum erzeugt SimpleDateFormat.parse beim Konvertieren von UNIX-Zeitstempeln eine unerwartete Ausgabe?

Barbara Streisand
Freigeben: 2024-10-27 16:26:29
Original
845 Leute haben es durchsucht

Why Does SimpleDateFormat.parse Produce Unexpected Output When Converting UNIX Timestamps?

Verschiedene Ausgabeformate von SimpleDateFormatter.parse

In einem Java-Programm wird die SimpleDateFormat-Klasse verwendet, um Datumsangaben in bestimmte Formate zu konvertieren. Es wurde jedoch beobachtet, dass in einigen Fällen das Parsen eines Datums mit SimpleDateFormatter.parse zu einem anderen Format als dem bei der Formatierung angegebenen führen kann.

Dieses Problem tritt bei der Konvertierung von UNIX-Zeitstempeln in Datumszeichenfolgen auf. Hier ist ein vereinfachtes Beispiel:

<code class="java">String ep ="a1527069600";
Long epoch = Long.parseLong(ep.substring(1, ep.length()));
Date dt = new Date(epoch*1000L);
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta"));

System.out.println("SDF.Format - "+sdf.format(dt));
System.out.println("SDF.parse - "+sdf.parse(sdf.format(dt)));</code>
Nach dem Login kopieren

Während in diesem Beispiel das für sdf angegebene Format „TT/MM/JJJJ hh:mm:ss a“ ist, erfolgt die Ausgabe von sdf.parse in einem anderen Format , „Mi, 23. Mai 15:30:00 IST 2018.“

Lösung

Um dieses Problem zu beheben, vermeiden Sie die Übergabe von Datumszeichenfolgen an eine MySQL-Datenbank. Verwenden Sie stattdessen Datumsobjekte. Java stellt die java.time-API für die moderne Datums- und Uhrzeitverarbeitung bereit. Für Ihr spezifisches Szenario können Sie ein LocalDateTime-Objekt verwenden:

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

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

Dieser Ansatz stellt eine konsistente Datumsformatierung sicher und beseitigt das Parsing-Problem, das bei SimpleDateFormatter.parse auftritt.

Das obige ist der detaillierte Inhalt vonWarum erzeugt SimpleDateFormat.parse beim Konvertieren von UNIX-Zeitstempeln eine unerwartete Ausgabe?. 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