Java日期和夏令时

Java日期和夏令时,java,date,dst,Java,Date,Dst,我正在尝试使用for循环打印一天中的所有小时,并递增日期对象。 但我没有“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 我对时区不感兴趣。 我想问题是因为夏令时,但我需要“Sun Mar 2

我正在尝试使用for循环打印一天中的所有小时,并递增日期对象。 但我没有“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
我对时区不感兴趣。 我想问题是因为夏令时,但我需要“Sun Mar 25 02:00:00”。
如何创建该日期?

日历类允许您在转换
日期
值时指定时区。请参见日历
类允许您在转换
日期
值时指定时区。请参见

您可能想要一个为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);
    }
}

当然,您可以使用格式化程序对日期进行任意格式化。

您可能需要一个为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);
    }
}

当然,您可以使用格式化程序对日期进行格式化,无论您喜欢什么。

您需要时区,我相信只有美国才关心夏令时。
但我需要“Sun Mar 25 02:00:00”。如何创建该日期?
为什么不直接打印该字符串?并非所有时区都存在该日期。我必须将日期ojbect传递给一个不关心时区的函数。您可以破例,只要在循环中为该特定日期使用
条件即可。您需要时区,我相信只有美国关心夏令时。
但我需要“Sun Mar 25 02:00:00”。如何创建该日期?
为什么不直接打印该字符串?该日期并不存在于所有时区中。我必须将日期ojbect传递给一个不关心时区的函数。您可以破例,只需在循环中为此特定日期使用
if
条件即可。