【问题标题】:Java Date and Daylight SavingJava 日期和夏令时
【发布时间】:2012-12-21 12:11:40
【问题描述】:

我正在尝试使用 for 循环和递增 Date 对象来打印一天中的所有时间。 但我不能有“Sun Mar 25 02:00:00”,我只有这些:

Sun Mar 25 01:00:00 CET 2012
Sun Mar 25 03:00:00 CEST 2012
Sun Mar 25 03:00:00 CEST 2012
Sun Mar 25 04:00:00 CEST 2012
Sun Mar 25 05:00:00 CEST 2012

我对拥有 TimeZone 不感兴趣。 我认为问题出在夏令时,但我需要“Sun Mar 25 02:00:00”。 如何创建该日期?

【问题讨论】:

  • 你需要时区,我相信只有美国关心夏令时。
  • but I need the "Sun Mar 25 02:00:00". How can I do to create that date? 为什么不直接打印那个字符串呢?并非所有时区都存在该日期。
  • 我必须将 Date 对象传递给一个不关心时区的函数
  • 你可以例外,在你的循环中使用if条件来处理这个特定的日期。

标签: java date dst


【解决方案1】:

您可能想要一个为 UTC 设置的 DateFormat 对象(不遵守夏令时),使用设置为 UTC 的日历也会大大简化事情。

public static void main(String[] args) {
    TimeZone utc = TimeZone.getTimeZone("UTC");
    Calendar date = Calendar.getInstance(utc);
    DateFormat format = DateFormat.getDateTimeInstance();
    format.setTimeZone(utc);
    date.set(2012, 02, 24, 23, 00, 00);
    for (int i = 0; i < 10; i++) {
        System.out.println(format.format(date.getTime()));
        date.add(Calendar.HOUR_OF_DAY, 1);
    }
}

这提供了以下输出:

Mar 24, 2012 11:00:00 PM
Mar 25, 2012 12:00:00 AM
Mar 25, 2012 1:00:00 AM
Mar 25, 2012 2:00:00 AM
Mar 25, 2012 3:00:00 AM
Mar 25, 2012 4:00:00 AM
Mar 25, 2012 5:00:00 AM
Mar 25, 2012 6:00:00 AM
Mar 25, 2012 7:00:00 AM
Mar 25, 2012 8:00:00 AM

当然,您可以使用格式化程序随意格式化日期。

【讨论】:

    【解决方案2】:

    Calendar 类允许您在转换 Date 值时指定时区。见the API doc

    【讨论】:

      猜你喜欢
      • 2012-06-01
      • 1970-01-01
      • 2012-07-09
      • 2012-04-07
      • 2017-11-04
      • 2011-04-30
      • 2015-12-23
      • 2012-06-06
      • 2023-04-05
      相关资源
      最近更新 更多