Java日期和夏令时

时间:2013-01-07 18:02:44

标签: java date dst

我正在尝试使用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”。 如何创建该日期?

2 个答案:

答案 0 :(得分:4)

你可能想要一个为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

当然,您可以使用格式化程序来设置您喜欢的日期格式。

答案 1 :(得分:0)

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