java-从ID获取时区

java-从ID获取时区,java,timezone,timezone-offset,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.

为了获取新加坡的时区偏移量,如果我尝试使用新加坡作为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和美国/洛杉矶返回相同的偏移量

问候

编辑-

如果我的日期是2015-02-08上午11:18,那么

我仍然无法使用上述日期获得新加坡的抵销吗


试图了解如何使之成为可能。

并非所有三个字母ID都得到支持,如文档中所述:

为了与JDK1.1.x兼容,还支持其他一些三字母时区ID,如PST、CTT、AST。但是,不推荐使用它们[…]


正如文档中所述,并非所有三个字母ID都得到支持:

为了与JDK1.1.x兼容,还支持其他一些三字母时区ID,如PST、CTT、AST。但是,不推荐使用它们[…]


正如@duckstep所说,只支持几个短名称

因此,您必须使用亚洲/新加坡,例如:

代码:

输出:

亚洲/新加坡 28800000 新加坡时间 中士 新加坡夏季时间 SGST
正如@duckstep所说,只支持几个短名称

因此,您必须使用亚洲/新加坡,例如:

代码:

输出:

亚洲/新加坡 28800000 新加坡时间 中士 新加坡夏季时间 SGST 当我们给出时区时,我们能得到亚洲/新加坡的结果吗?getTimeZoneSGT?当我们给出时区时,我们能得到亚洲/新加坡的结果吗?getTimeZoneSGT?2-4个字母代码,如PST、CST、IST不是真正的时区。名称采用亚洲/新加坡等大陆/地区的格式。PST、CST、IST等2-4个字母代码不是真正的时区。名称的格式为大陆/地区,如亚洲/新加坡。
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));