在下面的一段代码中,我预计会抛出异常,因为星期几与月中的某一天不匹配。我无法在DateTimeFormat Javadocs中找到任何关于存在"严格"在这种不匹配的情况下,但我很困惑,这些糟糕的数据被允许通过。我是否误解了任何事情,或者这是一个有意识的设计决定,我应该以其他方式处理?
public static void main(String[] args) {
DateTimeFormatter DATE_FORMAT_LONG_DATE = //
DateTimeFormat.forPattern("EEEE, d MMMM yyyy")//
.withZone(DateTimeZone.forID("Australia/Melbourne"));
final String text = "Friday, 1 February 2016"; // Wrong.
final DateTime parsed = DATE_FORMAT_LONG_DATE.parseDateTime(text);
System.out.println(text);
System.out.println(DATE_FORMAT_LONG_DATE.print(parsed));
}
并输出:
Friday, 1 February 2016
Friday, 5 February 2016
答案 0 :(得分:4)
你是对的,确实如此 - documented(强调我的):
解析通过设置'来构建生成的瞬间。每个解析字段的值从最大到最小到初始时刻,通常是1970-01-01T00:00Z。此设计意味着每周的日期设置在星期几之前。 因此,如果解析了星期几和星期几,并且星期几不正确,那么星期几将覆盖日期。如果输入不一致,则会产生副作用。
我同意这是不幸的 - 但您可以随后重新格式化并检查值是否不同。