Joda:如何比较同一时区的日期实例与不同的时区表示?

时间:2013-06-22 09:23:41

标签: jodatime

我试图在我的单元测试中比较两个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

1 个答案:

答案 0 :(得分:1)

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

ISODateTimeFormat.dateTime().withOffsetParsed()