跳到主要內容

日光節約時間的程式計算方式

參考討論:
subtract two dates in milliseconds considering daylight time saving
Android/Java - Date Difference in days

最近一個外國客戶反映了個程式計算的日期相減結果不正確的問題
原本該算出10天的,結果卻給出了9.95天這樣微妙的結果
追查原因後才恍然大悟這是個之前都不曾想過的議題

很多計算日期差的程式的算法是這樣的
取出日期物件的 milliseconds 相減後,再除以一天的 millisecond  1000*60*60*24
不過國外有日光節約時間這回事,所以在那段期間的一天的 milliseconds 就和一般時間的不同
所以日光節約時間內的日期減掉一般日期,算出來的時間差就不是完整一天的時間的整數倍

看過討論後
最合適的解法是將時間轉換到UTC時區再進行計算,呈現在前端的日期再轉換成使用者時區
Java裡可以使用將會被納入到標準規格的 Joda Time 的API來進行
其他的程式語言就看是否有類似的時間處理規格,不然就轉成UTC計算了

留言