猛禽洛的程式筆記庫

[Java] SimpleDateFormat轉換時間不正確 使用DateTimeFormatter代替

在某次發布應用程式後,收到了輸出檔案內容時間日期重複的問題,找了好一陣子餵進SimpleDateFormat中的時間都是正確的,怎麼換算的時間會錯誤?

程式碼如下:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long processTimes = System.currentTimeMillis();
thisResult.put("CreateDate", df.format(startProcessTime));

 

文件一查下去才發現,SimpleDateFormat這東西已經不安全,在多執行序或者頻繁重複使用的環境中,內部容易卡時間,所以不建議使用了。

那替代品就是Java 8後出的DateTimeFormatter這個東西了,使用方式比SimpleDateFormat麻煩了一點,也許以後可以考慮寫成Lib的方式使用。

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");//日期格式
long processTimes = System.currentTimeMillis();
Instant instant = Instant.ofEpochMilli(processTimes);
LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
thisResult.put("CreateDate", localDateTime.format(dtf));

這樣即可解決SimpleDateFormat輸出亂輸出的問題!

 

-END-

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *