【问题标题】:How to do strict LocalDate parsing in js-joda?如何在 js-joda 中进行严格的 LocalDate 解析?
【发布时间】:2016-09-04 16:12:04
【问题描述】:

我正在尝试使用 js-joda(版本 1.1.1)中的严格分辨率从 String 解析 LocalDate。我不想接受无效日期的输入,例如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:

|符号 |含义 |介绍 |例子 |--------|----------------|------------ --------|--------------- |克|时代 |数字/文字 | 1个; 01;广告;公元 |是 |年份 |年份 | 2004; 04 | D |一年中的一天|号码 | 189 |中号 |一年中的一个月 |数字/文字 | 7; 07;七月;七月; Ĵ

Java api:

符号 含义 表示示例 ------ ------- ------------ -------- G时代文字AD;公元;一种 u 年 2004 年; 04 y 2004 年; 04 D 一年中的第 189 天

【问题讨论】:

  • 在 Java 中你必须使用 uuuu-MM-dd
  • 像魅力一样工作。谢谢。如果您想将其发布为答案,我会接受。它可能对其他人也有用。

标签: javascript jsr310 js-joda


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-11-27
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 2012-10-16
      • 2013-07-17
      相关资源
      最近更新 更多