Как сделать строгий разбор LocalDate в js-joda?
Я пытаюсь разобрать LocalDate
из String
используя строгое разрешение в js-joda
(версия 1.1.1). Я не хочу принимать данные, которые не являются действительными датами, например 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
?
Обновление:
Однако API DateTimeFormatter js-joda не упоминает эту опцию, шаблон uuuu-MM-dd
Предложенный @JodaStephen работает отлично. Рабочая Js Демо
| Символ | Значение | Презентация | Примеры |--------|----------------------------|------------------|--------------- | G | эра | номер / текст | 1; 01; ОБЪЯВЛЕНИЕ; Анно Домини | у | год | год | 2004; 04 | D | день года | номер | 189 | М | месяц года | номер / текст | 7; 07; Июль; июль; J
Примеры представления символов ------ ------- ------------ ------- G эра текст AD; Анно Домини; год 2004; 04 год 2004 года; 04 D день года № 189
2 ответа
Решение
Паттерн "гггг-ММ-дд" является неполным в режиме STRICT, поскольку он не обеспечивает эру. Вместо этого используйте шаблон "uuuu-MM-dd".
Вы можете просто использовать функцию LocalDate.parse без указания форматера.
LocalDate.parse('2016-05-10'); // '2016-05-10'
LocalDate.parse('2016-05-32'); // throws a DateTimeParseException