如何在Java中将Date调整为DST

时间:2012-06-17 01:00:05

标签: java timezone jodatime dst

我有一份用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的地区,所以对我来说有点混乱。

提前致谢。

1 个答案:

答案 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转换。