一直在和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”则相反。有人可以解释为什么这些会像我预期的那样出现。
答案 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小时。)