首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ThreeTenABP:如何使用自定义日期格式/ DateTimeFormatter验证日期?

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

Stack Overflow用户
提问于 2015-09-27 20:01:13
回答 1查看 1.5K关注 0票数 2

我使用的是ThreeTenABP,在LocalDate.parse(String)和LocalDate.parse(String,DateTimeFormatter)之间似乎遇到了实现上的差异。

代码语言:javascript
复制
LocalDate.parse("31/02/1985", DateTimeFormatter.ofPattern("dd/MM/yyyy"))

解析到"1985-02-28“,没有抛出一个例外。

代码语言:javascript
复制
LocalDate.parse("2015-02-31")

DateTimeParseException:文本“2015-02-31”无法解析:无效日期“2月31日”

文档几乎是用“字符串必须表示有效日期”来暗示这一点的,只有在无格式化程序方法中提到过。

如何使用三层bp以自定义格式(如31/02/1985 )验证日期?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-28 07:32:00

主要的区别可以解释为ISO_LOCAL_DATE格式化程序在默认情况下是严格的。默认情况下,其他格式化程序是智能。你引用的整句话是这样的:

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

因此非常清楚的是,无格式化程序方法只能在严格模式下解析与ISO兼容的日期,即使这样也只能解析ISO-8601子集,即:

uuuu-MM-dduuuuMMdd

关于严格模式,你可以看到它在研究源代码

代码语言:javascript
复制
   public static final DateTimeFormatter ISO_LOCAL_DATE; 
   static { 
     ISO_LOCAL_DATE = new DateTimeFormatterBuilder() 
       .appendValue(YEAR, 4, 10, SignStyle.EXCEEDS_PAD) 
       .appendLiteral('-') 
       .appendValue(MONTH_OF_YEAR, 2) 
       .appendLiteral('-') 
       .appendValue(DAY_OF_MONTH, 2) 
       .toFormatter(ResolverStyle.STRICT).withChronology(IsoChronology.INSTANCE); 
     } 

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32812262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档