Java JodaTime没有';不要在周和月的不匹配日期失败
在下面的代码中,我希望抛出一个异常,因为星期几与月份不匹配。我在报告中找不到任何关于对这种错误匹配“严格”的说法,但我很困惑,这样糟糕的数据是允许通过的。我是否误解了什么,或者这是一个有意识的设计决策,我应该以其他方式处理Java JodaTime没有';不要在周和月的不匹配日期失败,java,jodatime,Java,Jodatime,在下面的代码中,我希望抛出一个异常,因为星期几与月份不匹配。我在报告中找不到任何关于对这种错误匹配“严格”的说法,但我很困惑,这样糟糕的数据是允许通过的。我是否误解了什么,或者这是一个有意识的设计决策,我应该以其他方式处理 public static void main(String[] args) { DateTimeFormatter DATE_FORMAT_LONG_DATE = // DateTimeFormat.forPattern("EEEE, d MMMM
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
你说得对,就像我的一样: 解析通过将每个解析字段的值从最大值到最小值“设置”到初始瞬间(通常为1970-01-01T00:00Z),从而建立结果瞬间。此设计意味着将月日设置为周日之前同样,如果分析了月日和周日,并且周日不正确,则周日将覆盖月日。如果输入不一致,则会产生副作用。
我同意这是不幸的-但您可以在之后重新格式化并检查值是否不同。您是对的,确实如此-如(我的强调): 解析通过将每个解析字段的值从最大值到最小值“设置”到初始瞬间(通常为1970-01-01T00:00Z),从而建立结果瞬间。此设计意味着将月日设置为周日之前同样,如果分析了月日和周日,并且周日不正确,则周日将覆盖月日。如果输入不一致,则会产生副作用。
我同意这是不幸的-但您可以在之后重新格式化并检查值是否不同。谢谢Jon-答案是DateTimeFormatter的javadocs,而不是DateTimeFormat。我们必须记住这一课!谢谢Jon-答案是DateTimeFormatter的javadocs,而不是DateTimeFormat。我们必须记住这一课!