我试图在我的单元测试中比较两个Joda日期的相等性。使用expected
创建new DateTime(...)
,而使用parsed
从字符串中解析DateTimeFormatter
。
虽然我的日期字符串包含时区片段+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
答案 0 :(得分:1)
我自己找到了答案。 DateTimeFormatter
有一个选项可以阻止它解析时区偏移:
ISODateTimeFormat.dateTime().withOffsetParsed()