繁体   English   中英

如何在Java中抵消日期以调整为DST

[英]How to offset Date to adjust to DST in Java

我有一份用Java编写的工作,每天在该时区的指定时间运行。 例如,如果我在0800时首次开始工作,则必须每天都在同一时间运行该工作。 如果时区不遵循夏令时,则此方法工作正常。 但是,如果遵循DST,则会中断。

例如,如果我第一次在0800 PST开始工作,只要DST无效,它就必须始终在UTC 0000小时运行,但如果DST生效,则应该在前一天移至UTC 2300 hr。 如何针对这些DST更改以编程方式调整我的工作开始时间。

我的输入如下所示:

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

这些将是位于配置文件中的常量,并且一旦设置就无法修改。 不管DST是否生效,输入都将是PST。

因此,如果当前时区为PST,则它将在UTC 2012-06-16的0000小时运行,否则,它将在UTC 2012-06-15的2300个小时的时间运行。

我该如何实现。

注意:这不是作业问题,我来自不遵循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点,那么即使在夏令时期间,它也将继续在当地时间上午8点运行。 日历将为您处理DST转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM