2012-06-17 20 views
2

我有一段用Java編寫的作業,它每天在指定的時間在該時區運行。例如,如果我在08:00第一次開始工作,它必須每天在同一時間完成工作。如果時區沒有遵循DST,此工作正常。但是如果它遵循DST,它會中斷。如何抵消日期以適應Java中的DST

例如,如果我在0800 PST第一次啓動工作,只要DST不生效,它必須始終以UTC運行0000小時,但如果DST處於啓用狀態,則應移至前一天的2300小時影響。如何針對這些DST更改以編程方式調整我的作業開始時間。

我的輸入是這樣的:

String startdate = "2012-06-16T08:00:00" 
String timeZone = "PST"; 

位於一個配置文件,這些將是常數,一旦設定,不能修改。無論DST是否生效,輸入都將爲PST。

因此,如果當前時區在PST中,它將在UTC 2012-06-16 0000小時運行,否則它將在UTC 2012-06-15 23:00運行。

我該如何做到這一點。

注意:這不是一個家庭作業問題,我來自一個不遵循DST的地區,所以對我來說有點困惑。

在此先感謝。

回答

0

我不知道你是如何安排你的工作,但如果你手工計算下一個執行日期,你可以使用java.util.Calendar如下:

TimeZone tz = TimeZone.getTimeZone(timeZone); 
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
dateFormat.setTimeZone(tz); 
Calendar cal = Calendar.getInstance(); 
cal.setTimeZone(tz); 
cal.setTime(dateFormat.parse(startdate)); 

然後作業的每個執行後,你可以計算作業的下次運行時間:

cal.add(Calendar.DAY_OF_YEAR, 1); 

這增加了一個日曆日,而不是24小時。因此,如果開始日期是當地時間上午8點,那麼即使在DST期間,當地時間上午8點也會繼續運行。日曆將爲您處理DST轉換。