我正在尝试使用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.LENIENT
或ResolverStyle.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-joda DateTimeFormatter API没有提到这个选项,@ JodaStephen提出的模式uuuu-MM-dd
工作正常。 Working Js Demo
|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
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
答案 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