JAVA中toLocalleString,java-Joda时间:如何将String转换为LocalDate?

博客讨论了Joda-Time库中LocalDate.parse()方法的一个潜在问题,即它默认将不包含破折号的日期字符串解释为'yyyy-MM-dd'格式,可能导致意外的日期解析结果。作者建议使用DateTimeFormat明确指定'yyyyMMdd'格式来避免这种误导性的行为,并展示了正确解析日期的示例。文章强调了明确指定日期格式的重要性,以防止解析错误和意外的日期转换。
摘要由CSDN通过智能技术生成

使用LocalDate.parse()或new LocalDate()553存在一个有点微妙的bug-ish问题。一个代码段值得一千个单词。 在下面的示例中,我想以字符串格式yyyyMMdd获取本地日期。 LocalDate.parse()很高兴为我提供LocalDate的实例,但它不是正确的实例(new LocalDate()具有相同的行为):

scala> org.joda.time.LocalDate.parse("20120202")

res3: org.joda.time.LocalDate = 20120202-01-01

我以yyyyMMdd的格式给它提供了2016年2月2日,并且我回想起20120201年1月1日的日期。 Joda使用'yyyy-MM-dd'作为默认值,但隐含地接受不带'-'字符的字符串,以为您想要当年的1月1日? 在我看来,这似乎不是合理的默认行为。

鉴于此,在我看来,使用无法轻易上当的joda日期格式化程序是解析字符串的更好解决方案。 此外,如果日期格式不是'yyyy-MM-dd',则LocalDate.parse()应该可能引发异常:

scala> val format = org.joda.time.format.DateTimeFormat.forPattern("yyyyMMdd")

format: org.joda.time.format.DateTimeFormatter = org.joda.time.format.DateTimeFormatter@56826a75

scala> org.joda.time.LocalDate.parse("20120202", format)

res4: org.joda.time.LocalDate = 2012-02-02

这将导致其他格式失败,因此您不会遇到这种奇怪的越野车行为:

scala> val format = org.joda.time.format.DateTimeFormat.forPattern("yyyy-MM-dd")

format: org.joda.time.format.DateTimeFormatter = org.joda.time.format.DateTimeFormatter@781aff8b

scala> org.joda.time.LocalDate.parse("20120202", format)

java.lang.IllegalArgumentException: Invalid format: "20120202" is too short

at org.joda.time.format.DateTimeFormatter.parseLocalDateTime(DateTimeFormatter.java:900)

at org.joda.time.format.DateTimeFormatter.parseLocalDate(DateTimeFormatter.java:844)

at org.joda.time.LocalDate.parse(LocalDate.java:179)

... 65 elided

这比返回20120202年的日期更为理智。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值