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



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

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

DateTimeZone.forTimeZone(TimeZone.getTimeZone("..."))

BUT TimeZone也不支持"EDT"。来自Javadoc:

与JDK 1.1兼容。此外,还支持其他三个字母的时区id(如"PST"、"CTT"、"AST")。但是,不推荐使用它们…

注意"some":在撰写本文时,PDT未在TimeZone.getAvailableIDs()中列出(至少在ideone.com上)。如果您尝试在这里使用"PDT",您将最终得到GMT时区:

[TimeZone.getTimeZone返回]指定的TimeZone,如果给定的ID不能被理解,则返回GMT区域。

所以最好避免使用这种方法,除非您能保证您只尝试将它用于支持的时区标识符。

Joda api不支持缩略时区名称的映射(如"EDT")。

为什么?

因为它们是有歧义的!例如,EDT可以表示UTC-4或UTC+11。

所以如果你想实现一个映射,你需要决定如何想要名字被映射,然后自己创建和填充一个映射。

来源:http://www.timeanddate.com/library/abbreviations/timezones/

您可以使用此代码获取DateTimeZone对象-

//User Defined
        DateTimeZone dtz = DateTimeZone.forID("America/New_York");
        //System Default TimeZone
        DateTimeZone dtzz = DateTimeZone.forID(TimeZone.getDefault().getID());

相关内容

  • 没有找到相关文章

最新更新