」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 將 UNIX 時間戳轉換為日期時,為什麼 SimpleDateFormat.parse 的輸出與指定的不同?

將 UNIX 時間戳轉換為日期時,為什麼 SimpleDateFormat.parse 的輸出與指定的不同?

發佈於2024-11-09
瀏覽:471

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

SimpleDateFormatter.parse 輸出與指定不同

使用SimpleDateFormat 將UNIX 時間戳記轉換為日期時,您可能會遇到指定格式與實際格式之間的差異輸出。

在給定的範例中,目標是轉換 UNIX 時間戳記(“a1527069600”)轉換為“dd/MM/yyyy hh:mm:ss a”格式的日期。但是,使用 SimpleDateFormatter.format 後面跟著 SimpleDateFormatter.parse 會產生不同的輸出。

差異原因

差異的原因是SimpleDateFormatter.parse 期望字串格式準確實例化期間指定的格式(“dd/MM/yyyy hh:mm: ss a”)。在這種情況下,SimpleDateFormatter.format 輸出的日期格式與預期的輸入格式不同,導致解析操作失敗。

解決方案

避免此問題,建議不要將日期字串傳遞給 MySQL 資料庫。相反,請使用日期物件。現代 Java 日期和時間 API java.time 提供了 LocalDateTime 等類,讓日期處理更容易。

範例:

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

這段程式碼將UNIX時間戳轉換為LocalDateTime,可直接插入MySQL資料庫。

結論:

透過利用java.time並將日期物件而不是字串傳遞給MySQL,您可以消除格式問題並確保日期轉換的準確性。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3