Java Joda Time Date时区比较不正确

Java Joda Time Date时区比较不正确,java,timezone,jodatime,Java,Timezone,Jodatime,我一直在为一个使用Joda Time的项目进行单元测试,我注意到应该代表同一时区的DateTimeZone实例在equals上没有返回true。特别是在下面这样的单元测试中 //应该是相同的 DateTimeZone WAT=DateTimeZone.forOffsetHours(1);//格林尼治时间+01:00 DateTimeZone LAG=DateTimeZone.forID(“非洲/拉各斯”);//拉各斯 DateTime样本=新的DateTime(2017,11,15,10,50)

我一直在为一个使用Joda Time的项目进行单元测试,我注意到应该代表同一时区的
DateTimeZone
实例在
equals
上没有返回true。特别是在下面这样的单元测试中

//应该是相同的
DateTimeZone WAT=DateTimeZone.forOffsetHours(1);//格林尼治时间+01:00
DateTimeZone LAG=DateTimeZone.forID(“非洲/拉各斯”);//拉各斯
DateTime样本=新的DateTime(2017,11,15,10,50);
DateTime dtzWAT=样本,带区域包含字段(WAT);
DateTime dtzLAG=sample.withZoneRetainFields(滞后);
@测试公共空比较器(){assertEquals(WAT,LAG);}
@Test public void compareTimes(){assertEquals(dtzWAT,dtzLAG);}
即使
Africa/Lagos
GMT+01:00
是同一时区,并且两个
DateTimes
代表相同的瞬间,这两个测试仍然失败-事实上,下面的两个测试证实了这一点

//两者都成功了
@测试公共空间比较(){
assertEquals(dtzWAT.toString(),dtzLAG.toString());
}
@测试公共void checkSameTime(){
资产虚假(dtzLAG.isBefore(dtzWAT));
资产虚假(dtzWAT.isBefore(dtzLAG));
}
为什么会发生这种情况?为什么这两个时区的实例不相等,这附近还有其他原因吗?任何帮助都将不胜感激

为什么会发生这种情况

DateTimeZone
s不相等:一个称为
Africa/Lagos
,另一个称为
GMT+01:00
。上面写着

如果相等,则为true,基于ID和所有内部规则

以及:

将此对象与指定对象进行比较,以根据毫秒瞬间、时间顺序和时区确定相等性

时区不相等,因此
DateTime
s不相等

也许他们实际上是平等的,但并不意味着他们实际上是平等的


请注意,
java.util.TimeZone
hasSameRules(…)
方法,这是一个独立于相等的概念。

“有什么办法可以解决这个问题吗”您实际上在试图解决什么问题?@AndyTurner我需要一种方法使DateTime实例相等。我知道他们实际上是平等的,但我需要用
equals
方法来反映这一点。但平等在什么意义上呢?如果要确保它们在时间上引用相同的瞬间(与Unix历元的偏移量相同),请使用
.toInstant()
将它们转换为
instant
,然后进行比较(或使用
!a.isAfter(b)和&!b.isAfter(a)
;或
a.compareTo(b)==0
,但请注意这与
等于
不一致)。