首頁 > 資料庫 > mysql教程 > 為什麼 SimpleDateFormat.parse 在轉換 UNIX 時間戳記時會產生意外的輸出?

為什麼 SimpleDateFormat.parse 在轉換 UNIX 時間戳記時會產生意外的輸出?

Barbara Streisand
發布: 2024-10-27 16:26:29
原創
845 人瀏覽過

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

SimpleDateFormatter.parse 的不同輸出格式

在 Java 程式中,SimpleDateFormat 類別用於將日期轉換為指定格式。但是,據觀察,在某些情況下,使用 SimpleDateFormatter.parse 解析日期可能會產生與格式化期間指定的格式不同的格式。

將 UNIX 時間戳轉換為日期字串時會出現此問題。這是一個簡化的範例:

<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>
登入後複製

在此範例中,雖然為sdf 指定的格式為“dd/MM/yyyy hh:mm:ss a”,但sdf.parse 的輸出採用不同的格式,「Wed May 23 15:30:00 IST 2018。」

解決方案

要解決此問題,請避免將日期字串傳遞到MySQL資料庫.相反,請使用日期物件。 Java 提供了 java.time API 用於現代日期和時間處理。對於您的特定場景,您可以使用 LocalDateTime 物件:

<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>
登入後複製

此方法可確保一致的日期格式並消除 SimpleDateFormatter.parse 遇到的解析問題。

以上是為什麼 SimpleDateFormat.parse 在轉換 UNIX 時間戳記時會產生意外的輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板