如何在js-joda中进行严格的LocalDate解析?

时间:2016-05-09 21:22:49

标签: javascript jsr310 js-joda

我正在尝试使用LocalDate(版本1.1.1)中的严格解决方案从String解析js-joda。我不想接受非有效日期的输入,例如2016-05-32。但我只是不明白。

我的代码是:

formatter = (new JSJoda.DateTimeFormatterBuilder)
    .appendPattern("yyyy-MM-dd")
    .toFormatter(JSJoda.ResolverStyle.STRICT);

JSJoda.LocalDate.parse("2016-05-10", formatter);

和错误:

Text '2016-05-10' could not be parsed: Unable to obtain LocalDate from
TemporalAccessor: [object Object], type DateTimeBuilder: 2016-05-10,
at index: 0

ResolverStyle.LENIENTResolverStyle.SMART相同的代码与此模式的预期相同。

formatter = (new JSJoda.DateTimeFormatterBuilder)
    .appendPattern("yyyy-MM-dd")
    .toFormatter(JSJoda.ResolverStyle.LENIENT);

JSJoda.LocalDate.parse("2016-05-32", formatter); // result 2016-06-01

如何在js-joda中使用严格的解决方案?

JS Demo

更新

然而js-joda DateTimeFormatter API没有提到这个选项,@ JodaStephen提出的模式uuuu-MM-dd工作正常。 Working Js Demo

js-joda api

 |Symbol  |Meaning                     |Presentation      |Examples
 |--------|----------------------------|------------------|---------------
 | G      | era                        | number/text      | 1; 01; AD; Anno Domini
 | y      | year                       | year             | 2004; 04
 | D      | day-of-year                | number           | 189
 | M      | month-of-year              | number/text      | 7; 07; Jul; July; J

Java api

 Symbol  Meaning                     Presentation      Examples
  ------  -------                     ------------      -------
   G       era                         text              AD; Anno Domini; A
   u       year                        year              2004; 04
   y       year-of-era                 year              2004; 04
   D       day-of-year                 number            189

2 个答案:

答案 0 :(得分:2)

模式“yyyy-MM-dd”在STRICT模式下不完整,因为它没有提供时代。请改为使用“uuuu-MM-dd”模式。

答案 1 :(得分:0)

您可以直接使用LocalDate.parse函数而不指定格式化程序。

LocalDate.parse('2016-05-10');  // '2016-05-10'

LocalDate.parse('2016-05-32');  // throws a DateTimeParseException