java-从ID获取时区



为了获得新加坡的时区偏移量,如果我尝试"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

相关内容

  • 没有找到相关文章

最新更新