ThreeTenABP:如何使用自定义日期格式/ DateTimeFormatter验证日期?

时间:2015-09-27 20:01:14

标签: java android threetenbp

我正在使用ThreeTenABP,似乎在LocalDate.parse(String)和LocalDate.parse(String,DateTimeFormatter)之间遇到了不同的实现。

LocalDate.parse("31/02/1985", DateTimeFormatter.ofPattern("dd/MM/yyyy"))

解析“1985-02-28”而没有抛出异常。

LocalDate.parse("2015-02-31")

DateTimeParseException:无法解析文本'2015-02-31':无效日期'FEBRUARY 31'

documentation 几乎暗示了这一点,“字符串必须代表一个有效的日期”,仅用格式化程序方法提及。

如何使用threeten bp以自定义格式验证日期,例如31/02/1985?

1 个答案:

答案 0 :(得分:2)

主要区别可以解释为ISO_LOCAL_DATE格式化程序默认是严格的。其他格式化程序默认为smart。你引用的完整句子如下:

  

字符串必须表示有效日期并使用解析   DateTimeFormatter.ISO_LOCAL_DATE。

很明显,无格式化程序的方法只能在严格模式下解析ISO兼容日期,即使只有subset of ISO-8601,也就是:

shared preferencesuuuu-MM-dd

关于严格模式,您可以看到它正在研究source code

uuuuMMdd

但是,严格模式似乎没有很好的记录。无论如何,如果你想用自定义格式化程序实现严格模式,那么只需调用它的方法withResolverStyle(ResolverStyle.STRICT)