为了获得新加坡的时区偏移量,如果我尝试"Singapore"作为ID,我会得到正确的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"代替"Singapore"来获得新加坡的正确偏移????
以上问题不是为ID"America/Loss_Angeles"制作的。"PST"one_answers"America/Loss_Angeles"返回相同的偏移量。
问候
已编辑--
如果我的日期是"2015-02-08上午11:18 SGT",那么?????
我还是不能用上面的日期来抵消"新加坡"吗?
试着弄明白我是怎么做到的。
并非所有三个字母的ID都得到支持,如文档中所述:
为了与JDK1.1.x兼容,还支持一些其他三个字母的时区ID(如"PST"、"CTT"、"AST")。然而,他们的使用是不赞成的〔…〕
正如@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