java-从ID获取TimeZone

时间:2015-02-07 18:38:08

标签: java timezone timezone-offset

为了获得新加坡的时区偏移,如果我尝试将“新加坡”作为ID,我会得到正确的,如下所示:

TimeZone timeZone = TimeZone.getTimeZone("Singapore");
    int offset = timeZone.getRawOffset();//It prints 28800000 which is correct

但是,如果尝试SGT代替新加坡,如下所示,它将返回GMT的偏移,因为它不理解SGT为id:

TimeZone timeZone = TimeZone.getTimeZone("SGT");
    int offset = timeZone.getRawOffset();//It prints 0 which is incorrect and should be 28800000 

通过使用“SGT”代替“新加坡”来获取新加坡的正确抵消????

ID“America / Los_Angeles”不会产生上述问题。 “PST”和“America / Los_Angeles”返回相同的偏移量。

问候

编辑 -

如果我有“2015-02-08 11:18 AM SGT”的日期,那么?????

我仍然无法使用上述日期抵消“新加坡”吗?

试着让我如何做到这一点。

2 个答案:

答案 0 :(得分:2)

并非所有三个字母的ID似乎都受支持,如文档中所述:

  

为了与JDK 1.1.x兼容,还支持一些其他三个字母的时区ID(例如“PST”,“CTT”,“AST”)。但是,它们的使用已被弃用[...]

答案 1 :(得分:0)

正如@duckstep所说,只支持一些短名称。

因此,您必须使用Asia/Singapore,例如:

<强>代码

TimeZone timeZone = TimeZone.getTimeZone("Asia/Singapore");
System.out.println(timeZone.getID());
System.out.println(timeZone.getRawOffset());
System.out.println(timeZone.getDisplayName(false, TimeZone.LONG));
System.out.println(timeZone.getDisplayName(false, TimeZone.SHORT));
System.out.println(timeZone.getDisplayName(true, TimeZone.LONG));
System.out.println(timeZone.getDisplayName(true, TimeZone.SHORT));

<强>输出

Asia/Singapore
28800000
Singapore Time
SGT
Singapore Summer Time
SGST