Joda时区计算

时间:2011-10-24 13:06:29

标签: java timezone jodatime

一直在和Joda时区一起玩,发现以下看起来很奇怪。

我运行了以下代码

    DateTimeZone gmt = DateTimeZone.forID( "Etc/GMT" );
    DateTimeZone gmtPlusOne = DateTimeZone.forID( "Etc/GMT+1" );
    DateTimeZone gmtMinusOne = DateTimeZone.forID( "Etc/GMT-1" );

    System.out.println( new DateTime( gmt ).toString() );
    System.out.println( new DateTime( gmtPlusOne ).toString() );
    System.out.println( new DateTime( gmtMinusOne ).toString() );

获得以下输出

2011-10-24T13:00:12.890Z
2011-10-24T12:00:12.937-01:00
2011-10-24T14:00:12.937+01:00

我有点惊讶地看到“gmtPlusOne”以-01:00落后一小时,而“gmtMinusOne”则相反。有人可以解释为什么这些会像我预期的那样出现。

1 个答案:

答案 0 :(得分:15)

documentation解释了这种不那么直观行为的原因。它表示Etc/GMT+1的标准偏移量为-1:00,而Etc/GMT-1的标准偏移量为+1:00。对于任何Etc/GMT+n,这种偏移的逆转都成立。

来自wiki

  

Etc的特殊区域用于某些行政区域,   特别是代表Coordinated Universal的“Etc / UTC”   时间。为了符合POSIX样式,这些区域名称   从“Etc / GMT”开始,他们的标志与大多数人的标志相反   人们期待。在这种风格中,格林威治标准时间以西的区域有一个正号   那些东方的名字有一个负号(例如“Etc / GMT-14”是   格林尼治标准时间提前14小时。)