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

时间:2013-03-25 09:57:40

标签: java datetime timezone jodatime

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

3 个答案:

答案 0 :(得分:5)

或许值得指出的是,虽然jodatime不支持三个字母的时区标识符(除了“UTC”),但java.util.TimeZone却支持;您可以使用DateTimeZone.forTimeZone methodDateTimeZone创建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());