1

我试图在我的单元测试中比较两个 Joda 日期是否相等。expectednew DateTime(...)while创建,parsedDateTimeFormatter.

虽然我的日期字符串包含时区片段+02:00,但解析的日期具有时区Europe/Berlin。这在语义上是正确的(至少在 DST 期间),但是这两个日期不正确equal

当然,我可以使用 来创建我的预期时区DateTimeZone.forID("Europe/Berlin"),但恕我直言,这并不完全正确。在冬季和夏季Europe/Berlin有一个偏移量。输入字符串明确指出,因此如果输入日期是在冬季,我的单元测试将失败。+01:00+02:00+02:00

有想法该怎么解决这个吗?

示例代码

DateTimeFormatter formatter = ISODateTimeFormat.dateTime();
DateTime expected = new DateTime(2013, 6, 22, 11, 7, 22, 123, DateTimeZone.forOffsetHours(2));
String input = "2013-06-22T11:07:22.123+02:00";
DateTime parsed = formatter.parseDateTime(input);
System.out.println("expected: " + expected + " (" + expected.getChronology() + ")");
System.out.println("parsed  : " + parsed + " (" + parsed.getChronology() + ")");
System.out.println("equal   : " + expected.equals(parsed));

示例输出

expected: 2013-06-22T11:07:22.123+02:00 (ISOChronology[+02:00])
parsed  : 2013-06-22T11:07:22.123+02:00 (ISOChronology[Europe/Berlin])
equal   : false
4

1 回答 1

1

刚刚自己找到了答案。有一个选项可以DateTimeFormatter防止它解决时区偏移:

ISODateTimeFormat.dateTime().withOffsetParsed()
于 2013-06-22T09:24:37.890 回答