如何抵消日期以适应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转换。