如何抵消日期以适应Java中的DST

如何抵消日期以适应Java中的DST

问题描述:

我有一段用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的地区,所以对我来说有点困惑。

在此先感谢。

我不知道你是如何安排你的工作,但如果你手工计算下一个执行日期,你可以使用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转换。