为什么以下代码:
System.out.println("Khartoum offset: " + TimeZone.getTimeZone("Asia/Khartoum").getRawOffset());
// GMT+2
System.out.println("Moscow offset: " + TimeZone.getTimeZone("Europe/Moscow").getRawOffset());
// GMT+3
System.out.println("Cairo offset: " + TimeZone.getTimeZone("Africa/Cairo").getRawOffset());
// GMT+2
产生这个奇怪的输入:
Khartoum offset: 0, why is this 0??? It should have been 7200000
Moscow offset: 10800000 // 3 hours, which is OK for GMT+3
Cairo offset: 7200000 // 2 hours, which is OK for GMT+2
如果您在Google中输入Khartoum time
,则会发现喀土穆有GMT+2
(与#34; Cairo相同)#。
UPD :System.out.println(TimeZone.getTimeZone("Africa/Khartoum").getRawOffset());
打印出10800000
,基本上是GMT + 3。不应该打印7200000
(对应于GMT + 2),但是(证据:这是怎么回事:ideone.com/sm2SHC)?
答案 0 :(得分:3)
答案 1 :(得分:1)
有关支持的时区标识符列表,请参阅TimeZone.getAvailableIds()
。 "Asia/Khartoum"
似乎不在其中。
TimeZone.getTimeZone(String)
的javadoc说
返回: 指定的TimeZone,如果无法理解给定ID,则 GMT区域。
更多的
另一方面,如果您选中"Africa/Khartoum"
TimeZone.getTimeZone("Africa/Khartoum").getRawOffset()
它返回7200000
(至少在我尝试时)。
答案 2 :(得分:0)
如果你怀疑还有另一个“喀土穆”,例如“亚洲/喀土穆”, 你可以编写代码来清除所有的疑惑:
String[] strings = TimeZone.getAvailableIDs();
for (String s : strings) {
if (s.contains("Khartoum")) {
System.out.println(s);
}
}
输出(即使在Java 10中)
非洲/喀土穆
编辑:由于您提供的代码输出错误,我将在此处发布我编写的完整代码。请复制/粘贴此代码,并显示一些反馈......
import java.util.TimeZone;
public class Answer {
public static void main(String[] args) {
String[] strings = TimeZone.getAvailableIDs();
for (String s : strings) {
if (s.contains("Khartoum")) {
System.out.println("For " + s + " raw offset is "
+ TimeZone.getTimeZone(s).getRawOffset());
}
}
}
}
输出应为:
非洲/喀土穆的原始抵消额为7200000