我在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));
}
Run Code Online (Sandbox Code Playgroud)
其中一个生成的时区具有以下信息:
America/New_York;东部标准时间; -4.000000
这令人费解.此时,纽约正处于东夏夏令时.所以上面的信息不对.
有谁知道如何让Java生成
America/New_York;东部标准时间; -5.000000
或类似的东西
America/New_York;东夏夏令时; -4.000000
感谢帮助!
问候
使用getDisplayName(daylight, style),传入truefor daylight。这将打印:
America/New_York;Eastern Daylight Time; -4.000000
Run Code Online (Sandbox Code Playgroud)
但是您必须确定当前时间是否处于夏令时(否则它将始终返回“夏令时”,即使在秋季和冬季也是如此)。这应该可以解决问题:
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));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
691 次 |
| 最近记录: |