有没有办法从时区字符串表示创建(joda)DateTimeZone对象,如“EDT”或“+0330”?
答案 0 :(得分:5)
或许值得指出的是,虽然jodatime不支持三个字母的时区标识符(除了“UTC”),但java.util.TimeZone
却支持;您可以使用DateTimeZone.forTimeZone
method从DateTimeZone
创建TimeZone
个实例:
DateTimeZone.forTimeZone(TimeZone.getTimeZone("..."))
但 TimeZone
也不支持“EDT”。来自Javadoc:
为了与JDK 1.1.x兼容,还支持其他一些三字母时区ID(例如“PST”,“CTT”,“AST”)。但是,它们的使用已被弃用......
注意“some”:在撰写本文时,PDT未在TimeZone.getAvailableIDs()
中列出(至少在ideone.com上)。如果您尝试在此处使用“PDT”,则会end up with the GMT timezone:
[
TimeZone.getTimeZone
返回]指定的TimeZone,如果无法理解给定的ID,则返回GMT区域。
因此,除非您可以保证只会尝试将其用于支持的时区标识符,否则最好避免使用此方法。
答案 1 :(得分:1)
Joda API不支持缩写时区名称的映射(如“EDT”)。
为什么?
因为它们含糊不清!例如,EDT可以表示UTC-4或UTC + 11.
因此,如果您想实现映射,则需要确定 希望如何映射名称,然后自己创建并填充地图。
来源:http://www.timeanddate.com/library/abbreviations/timezones/
答案 2 :(得分:0)
您可以使用此代码获取DateTimeZone对象 -
//User Defined
DateTimeZone dtz = DateTimeZone.forID("America/New_York");
//System Default TimeZone
DateTimeZone dtzz = DateTimeZone.forID(TimeZone.getDefault().getID());