【问题标题】:Joda time does not parse months correctlyJoda 时间无法正确解析月份
【发布时间】:2014-06-03 21:16:29
【问题描述】:

我有这个简单的代码:

DateTimeFormatter format = DateTimeFormat.forPattern("YYYY MM DD");
DateTime dateTime;

String buffer = "2013 01 01";
dateTime = format.parseDateTime(buffer);
System.out.println(dateTime.getMonthOfYear());

buffer = "2013 02 01";
dateTime = format.parseDateTime(buffer);
System.out.println(dateTime.getMonthOfYear());

输出是: 1 1

但我希望: 1 2

...问题出在哪里?我不需要获取一年中的月份,但我无法确定 dayOfWeek,因为 dateTime 始终是一月,而不是其他月份。

【问题讨论】:

    标签: java parsing date time jodatime


    【解决方案1】:

    @LuS 给出的解决方案是正确的。我提供解释

    在您的情况下,符号 Y(JodaTime 中的年代)或 y(预测等年代)之间的选择并不那么重要,因为在我们现代,这两个年份都有相同的数字。符号 M 是正确的(表示月份)。因此,让我们专注于 DD 与 dd。

    解决方案“d”有效,因为年/月/日的组合使解析器可以计算日历日期(微不足道)。如果缺少 day-of-month,则解析器不能再构造仅包含年和月的日期。

    那么 D 是什么?它是一年中的某一天。 由于要解析的字符串的相应数字部分在这两种情况下都是“01”,因此解析器将日期构造为 ISO-Ordinal-Date 与年和日-of-year(在您的两个示例中都相同),忽略(不同的)月份部分。

    当然,解析结果“2013-001”=“2013-01-01”不适合输入“2013 02 01”,因此严格解析应该会失败。不幸的是,即使在严格模式下,JodaTime 也不会尝试检查解析信息的一致性(使用org.joda.time.chrono.StrictChronology 测试)。

    【讨论】:

      【解决方案2】:

      如果我了解您需要检查您的模式:

      DateTimeFormatter format = DateTimeFormat.forPattern("yyyy MM dd");
      

      在哪里

      y       year
      d       day of month
      

      【讨论】:

        猜你喜欢
        • 2019-02-27
        • 2023-02-03
        • 1970-01-01
        • 2019-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-29
        相关资源
        最近更新 更多