【问题标题】:How to offset Date to adjust to DST in Java如何在 Java 中偏移日期以适应 DST
【发布时间】: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 的地区,所以对我来说有点困惑。

提前致谢。

【问题讨论】:

    标签: java timezone jodatime 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 转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-16
      • 2016-04-21
      • 2015-02-14
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 2017-12-13
      相关资源
      最近更新 更多