为了获得新加坡的时区偏移,如果我尝试将“新加坡”作为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”的日期,那么?????
我仍然无法使用上述日期抵消“新加坡”吗?
试着让我如何做到这一点。
答案 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