如何解析四位数年份(使用Joda Time)?

Emi*_*vas 4 java datetime jodatime

有没有办法强制Joda时间只在它们包含四位数年份时解析日期?例如:

  • 2009-11-11 - 应该解析
  • 09-11-11 - 不应该解析

试过以下代码:

DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
DateTimeFormatter formatter = builder.appendYear(4, 4).appendLiteral('-').appendMonthOfYear(1).appendLiteral('-').appendDayOfMonth(1).toFormatter();
formatter.parseDateTime("09-11-11");
Run Code Online (Sandbox Code Playgroud)

解析成0009-11-11.显然,方法appendYear中的minDigits仅用于在打印日期时进行格式化.
如果我使用appendYearOfEra(),结果是一样的.如果我使用appendYearOfCentury(),它会将年份解析为1909年.

我们正在实现一般数据解析器,它将识别各种类型的输入.此示例也是实际交易的缩短形式(为简单起见).现实生活场景解析可以有工作日的日期,月份作为单词,时间,区域和分隔月,日和年的不同字符.因此,编写RegEx或检查字符串的内容/长度可能相当困难.

一些真实的例子可能如下所示:

  • 2009-11-11
  • 周三2009-11-11T15:00:00
  • 2009/11/11 15:00
  • 还有很多...

Jod*_*hen 7

DateTimeFormatterBuilder.appendFixedDecimal()可能会做你需要的.

或者,您可以实现DateTimeParser接口来创建所需的任何解析器并将其传递到DateTimeFormatterBuilder.