我有一份用Java编写的工作,该工作每天在该时区的指定时间运行。例如,如果我在0800时第一次开始工作,它必须每天在同一时间运行工作。如果时区不遵循夏令时,这可以正常工作。但如果它遵循夏令时则会中断。
例如,如果我是在太平洋标准时间0800开始我的工作,它必须始终在UTC中0000小时运行,只要DST没有生效但如果DST生效则应该在前一天的2300小时UTC运行。如何以编程方式调整这些DST更改的作业开始时间。
我的输入如下:
String startdate = "2012-06-16T08:00:00"
String timeZone = "PST";
这些将是位于配置文件中的常量,并且一旦设置就无法修改。无论DST是否生效,输入都将为PST。
因此,如果当前时区位于PST,它将在2012年6月16日UTC时间运行,否则将在2012年6月15日UTC时间23:00运行。
我如何实现这一目标。
注意:这不是一个功课问题,我来自一个不遵循DST的地区,所以对我来说有点混乱。
提前致谢。
答案 0 :(得分: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点,那么即使在夏令时期间,它也会在当地时间早上8点继续运行。日历将为您处理DST转换。