9

我在 Windows 机器上运行 Java 程序。我正在尝试获取时区列表及其相关信息。这是完整的程序:

    String[] allTimeZones = TimeZone.getAvailableIDs();
    Date now = new Date();
    for (int i = 0; i < allTimeZones.length; i++) {
        TimeZone tz = TimeZone.getTimeZone(allTimeZones[i]);
        System.out.format("%s;%s; %f \n", 
                          allTimeZones[i],
                          tz.getDisplayName(), 
                          (float) (tz.getOffset(now.getTime())/3600000.0));
    }

生成的时区之一具有以下信息:

America/New_York;东部标准时间; -4.000000

这令人费解。此时,纽约正处于东部夏季夏令时。所以上面的信息是不对的。

有谁知道我如何让 Java 生成

America/New_York;东部标准时间; -5.000000

或类似的东西

America/New_York;东部夏季夏令时;-4.000000

感谢帮助!

问候

4

2 回答 2

2

使用getDisplayName(daylight, style),传入truefor daylight。这将打印:

America/New_York;Eastern Daylight Time; -4.000000

但是您必须确定当前时间是否处于夏令时(或者它总是返回“夏令时”,即使在秋季和冬季也是如此)。这应该可以解决问题:

String[] allTimeZones = TimeZone.getAvailableIDs();
Date now = new Date();
for (int i = 0; i < allTimeZones.length; i++) {
    TimeZone tz = TimeZone.getTimeZone(allTimeZones[i]);
    System.out.format("%s;%s; %f \n", allTimeZones[i], 
            tz.getDisplayName(tz.inDaylightTime(now), TimeZone.LONG), 
            (float) (tz.getOffset(now.getTime())/3600000.0));
}
于 2013-04-05T15:34:02.560 回答
1
于 2020-02-10T00:12:02.630 回答