java - JodaTime 不会在不匹配的星期几和月份失败

标签 java jodatime

在下面的代码中,我预计会抛出一个异常,因为星期几与月份的日期不匹配。我在 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

最佳答案

你是对的,确实如此 - 如 documented (强调我的):

Parsing builds up the resultant instant by 'setting' the value of each parsed field from largest to smallest onto an initial instant, typically 1970-01-01T00:00Z. This design means that day-of-month is set before day-of-week. As such, if both the day-of-month and day-of-week are parsed, and the day-of-week is incorrect, then the day-of-week overrides the day-of-month. This has a side effect if the input is not consistent.

我同意这很不幸 - 但您总是可以在之后重新格式化并检查值是否不同。

关于java - JodaTime 不会在不匹配的星期几和月份失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36966210/

相关文章:

java - 乔达日期时间到 Unix 日期时间

java - 将 24 小时制时间转换为 Joda-Time 中的上午/下午

java - ResultSet.getDate() 返回错误的日期

jodatime - 使用 JodaTime 获取下周一

java - 查找字符在字符串中的位置

java - 使用 Spring Integration 安排通过 FTP 进行远程文件下载并处理内存中的文件

java - 如何用 Java 读取 JPEG 文件属性?

java - Joda dateTime 解析器不必要地添加毫秒

java - 在 FileReader 中跳过预定义行

java - Mockito 监视具有内部方法引用的类