2014-12-22 33 views
0

我不得不使用任何第三方API使用JDK1.4使用Java Timer來安排一些作業。由於DST而跳過作業

如果Daylight Saving Time (DST)的變化是從凌晨2點到凌晨3點,那麼在DST轉換時間即凌晨2點到凌晨3點之間安排的Jobs的預期行爲應該如何?

  1. 如果作業被簡單地忽略爲凌晨2點和凌晨3點從來沒有出現在時鐘
  2. 它們應當在凌晨3點立即運行之間的時間。
  3. 任何其他預期的行爲?

我認爲許多企業應用程序不能跳過這些工作。應該如何進行?

回答

3

不要存儲/運行/等。任何使用DST的東西。這是...難以維持。

UTC

儲存於UTC數據庫中的所有日期。使用UTC執行所有時間計算。爲所有業務流程維護一個標準的不變時間測量。只有在向用戶顯示結果(顯示在屏幕上,打印報告等)時,才能將時間本地化爲用戶期望的任何內容。

基本上認爲所有的後端邏輯都是UTC,而在界面層面上會有一種局部時間和「系統」時間之間的翻譯層。

+1

要在此正確答案中使用UTC並轉換爲時區,最好在Java 8中使用Joda-Time或java.time包。避免使用java.util.Date/.Calendar類。 –

0

answer by David是正確的。

ScheduledExecutorService

另外,我建議使用ScheduledExecutorService而不是定時器。

請務必閱讀包含所有JavaDoc的內容。搜索StackOverflow以查找討論和示例代碼。具體而言,您必須捕獲所有異常,否則服務將停止。

+0

感謝您的建議。但是我已經提到過我必須使用Java 1.4,並且ScheduledExecutorService可以從1.5版本獲得。 – bluelurker

相關問題