2011-08-06 164 views
0

我在Joda時間有時區偏移問題。我認爲這只是一個理解的問題。Joda時間和時區偏移量

我有以下的解析器和打印機:

// The formatter for the timezone 
    DateTimeFormatter timezoneFormatter = new DateTimeFormatterBuilder().appendTimeZoneOffset(null, true, 2, 2) 
       .toFormatter(); 

    // This formatter equals: yyyy-MM-dd 
    DateTimeFormatter dhmsFormatter = ISODateTimeFormat.date(); 

    // Here a parser is created that parses a string of the form yyyy-MM-dd. Further the string may have 
    // a timezone. withOffsetParsed makes the parser to respect the set timezone (if one is set) 
    DATE_TIME_PARSER = new DateTimeFormatterBuilder().append(dhmsFormatter) 
       .appendOptional(timezoneFormatter.getParser()).toFormatter().withOffsetParsed(); 

    // Here a printer is created that prints this dateTime in the form yyyy-MM-dd ZZ 
    DATE_TIME_PRINTER = new DateTimeFormatterBuilder().append(dhmsFormatter).append(timezoneFormatter.getPrinter()).toFormatter(); 

此,當我分析,並有偏移集打印日期預期工作。例如爲:

  • 2006-11-11-09:00
  • 2004-12-01 + 00:00

這兩個值被解析並打印,因爲它們是上述在這裏寫。

現在我的問題: 我想能夠設置一個默認時區(即默認偏移量,當沒有設置)。 我是這樣做的:現在 DateTimeZone.setDefault(DateTimeZone.forID("Etc/GMT+1"));

我的期望是,2006-11-11被解析並打印2006-11-11+01:00,但實際上它打印2006-11-11-01:00

我認爲這是正確的,因爲在這裏http://www.joda.org/joda-time/timezones.html寫道Etc/GMT + 1的標準偏移量爲-01:00。 那又怎麼了? 我想抵消以反映GMT偏移量。 我也認爲我上面的值是錯誤的:意思2006-11-11-09:00不是「日本」的時區,但它是「美國/阿拉斯加」的時區。

我希望我的問題很清楚。 有沒有人有我的不理解的答案:)?

最好的問候, 弗洛裏安

回答

1

可以說,它是您在設置默認的時區之前實例DateTimeFormatterDateTime

無論如何,我相信withZone()方法應該給你你正在尋找的格式器/解析器。

+0

沒有這樣做是正確的。我的問題是,對於偏移量來說,有些事情是奇怪的(對我來說)。 GMT + 1的偏移量爲-01:00。但我的偏移量應該是+01:00。 –

+0

哦,那麼這可能是你的問題的(不完整)答案:http://answers.yahoo.com/question/index?qid=20090707145844AANnghH –