如何从时区字符串创建DateTimeZone对象?

jrh*_*ath 0 java timezone datetime jodatime

有没有办法从时区字符串表示创建(joda)DateTimeZone对象,如"EDT"或"+0330"?

And*_*ner 5

或许有必要指出,虽然jodatime不支持三个字母的时区标识符(除了"UTC"),但是java.util.TimeZone; 并且您可以使用以下方法DateTimeZone从a 创建实例:TimeZoneDateTimeZone.forTimeZone

DateTimeZone.forTimeZone(TimeZone.getTimeZone("..."))
Run Code Online (Sandbox Code Playgroud)

TimeZone也不支持"EDT".来自Javadoc:

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

注意"一些":在撰写本文时,PDT未列入TimeZone.getAvailableIDs()(至少在ideone.com上).如果您尝试在此处使用"PDT",您将最终获得GMT时区:

TimeZone.getTimeZone如果无法理解给定的ID,则[ 返回]指定的TimeZone或GMT区域.

因此,最好避免使用此方法,除非您可以保证只会尝试将其用于支持的时区标识符.