比较两个joda DateTime实例

时间:2013-12-31 22:03:25

标签: java datetime jodatime

比较两个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对象的时区。

谢谢!

2 个答案:

答案 0 :(得分:5)

DateTimeequals继承了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