我不得不使用任何第三方API使用JDK1.4使用Java Timer來安排一些作業。由於DST而跳過作業
如果Daylight Saving Time (DST)的變化是從凌晨2點到凌晨3點,那麼在DST轉換時間即凌晨2點到凌晨3點之間安排的Jobs的預期行爲應該如何?
- 如果作業被簡單地忽略爲凌晨2點和凌晨3點從來沒有出現在時鐘
- 它們應當在凌晨3點立即運行之間的時間。
- 任何其他預期的行爲?
我認爲許多企業應用程序不能跳過這些工作。應該如何進行?
我不得不使用任何第三方API使用JDK1.4使用Java Timer來安排一些作業。由於DST而跳過作業
如果Daylight Saving Time (DST)的變化是從凌晨2點到凌晨3點,那麼在DST轉換時間即凌晨2點到凌晨3點之間安排的Jobs的預期行爲應該如何?
我認爲許多企業應用程序不能跳過這些工作。應該如何進行?
不要存儲/運行/等。任何使用DST的東西。這是...難以維持。
儲存於UTC數據庫中的所有日期。使用UTC執行所有時間計算。爲所有業務流程維護一個標準的不變時間測量。只有在向用戶顯示結果(顯示在屏幕上,打印報告等)時,才能將時間本地化爲用戶期望的任何內容。
基本上認爲所有的後端邏輯都是UTC,而在界面層面上會有一種局部時間和「系統」時間之間的翻譯層。
該answer by David是正確的。
ScheduledExecutorService
另外,我建議使用ScheduledExecutorService而不是定時器。
請務必閱讀包含所有JavaDoc的內容。搜索StackOverflow以查找討論和示例代碼。具體而言,您必須捕獲所有異常,否則服務將停止。
感謝您的建議。但是我已經提到過我必須使用Java 1.4,並且ScheduledExecutorService可以從1.5版本獲得。 – bluelurker
要在此正確答案中使用UTC並轉換爲時區,最好在Java 8中使用Joda-Time或java.time包。避免使用java.util.Date/.Calendar類。 –