是否有办法从时区字符串表示(如"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());