比较两个DateTime对象时遇到问题。
System.out.println(response.getCreationDate().toString()); // will return "2013-12-31T22:59:21.000+01:00", but...
assertThat(response.getCreationDate(), equalTo(new DateTime("2013-12-31T22:59:21+01:00"))); // will throw an assertation error with the following error
Expected: <2013-12-31T22:59:21.000+01:00>
but: was <2013-12-31T22:59:21.000+01:00>
任何人都知道我在这里缺少什么?
顺便说一下,如果你想知道为什么DateTime会显示在GMT + 1:00区域,那么这就是我希望默认情况下我的DateTime对象的时区。
谢谢!
答案 0 :(得分:5)
DateTime
从equals
继承了AbstractInstant
方法。它是这样实现的
public boolean equals(Object readableInstant) {
// must be to fulfil ReadableInstant contract
if (this == readableInstant) {
return true;
}
if (readableInstant instanceof ReadableInstant == false) {
return false;
}
ReadableInstant otherInstant = (ReadableInstant) readableInstant;
return
getMillis() == otherInstant.getMillis() &&
FieldUtils.equals(getChronology(), otherInstant.getChronology());
}
注意比较年表的最后一行。您的实例的年表可能不同。
答案 1 :(得分:3)
此代码(示例):
Chronology ch1 = GregorianChronology.getInstance();
Chronology ch2 = ISOChronology.getInstance();
DateTime dt = new DateTime("2013-12-31T22:59:21+01:00",ch1);
DateTime dt2 = new DateTime("2013-12-31T22:59:21+01:00",ch2);
System.out.println(dt);
System.out.println(dt2);
boolean b = dt.equals(dt2);
System.out.println(b);
将打印:
2013-12-31T16:59:21.000-05:00
2013-12-31T16:59:21.000-05:00
false
您可能正在比较两个具有相同日期但DateTime不同的Chronology。