如何在 Java 中偏移日期以适应 DST
Posted
技术标签:
【中文标题】如何在 Java 中偏移日期以适应 DST【英文标题】:How to offset Date to adjust to DST in Java 【发布时间】:2012-06-19 13:21:15 【问题描述】:我有一份用 Java 编写的工作,该工作每天在该时区的指定时间运行。例如,如果我在 0800 时第一次开始工作,它必须每天在同一时间运行工作。如果时区不遵循 DST,这可以正常工作。但如果它遵循 DST,它就会中断。
例如,如果我在 0800 PST 第一次开始工作,只要 DST 未生效,它必须始终在 UTC 0000 小时内运行,但如果 DST 生效,则应移至前一天 2300 小时 UTC .如何针对这些 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 的地区,所以对我来说有点困惑。
提前致谢。
【问题讨论】:
【参考方案1】:我不知道您是如何安排工作的,但如果您手动计算下一个执行日期,您可以使用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 转换。
【讨论】:
以上是关于如何在 Java 中偏移日期以适应 DST的主要内容,如果未能解决你的问题,请参考以下文章