如何用DateTimeFormatter.ofPattern()解析无时分秒字符串为LocalDateTime
解决用
DateTimeFormatter.ofPattern()解析日期字符串为LocalDateTime的问题 你遇到的报错很典型——当用只包含日期的格式(比如yyyy-M-d)解析字符串时,解析结果里只有年、月、日的信息,没有LocalDateTime必需的时、分、秒字段,所以LocalDateTime.parse()没法从这个不完整的TemporalAccessor里构建出LocalDateTime对象。
如果不想用DateTimeFormatterBuilder,其实有个更简洁的替代方案:先解析成LocalDate,再转换为LocalDateTime并指定默认的时间部分。
具体实现代码
// 用ofPattern定义日期格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-M-d"); // 先解析为LocalDate LocalDate localDate = LocalDate.parse("2015-09-05", formatter); // 转换为LocalDateTime,设置你需要的默认时分秒(和你之前Builder里的默认值一致) LocalDateTime localDateTime = localDate.atTime(12, 13, 14); System.out.println(localDateTime); // 输出:2015-09-05T12:13:14
如果你的默认时间是当天的起始时间(00:00:00),可以用更简便的方法:
LocalDateTime localDateTime = localDate.atStartOfDay();
为什么这种方法可行?
LocalDate专门用于处理日期部分,用ofPattern的日期格式解析完全没问题。之后通过atTime()或atStartOfDay()方法,我们手动补全了LocalDateTime需要的时间字段,完美避开了直接解析时缺失字段的问题。
而DateTimeFormatter.ofPattern()本身并没有提供设置默认字段值的功能——这正是DateTimeFormatterBuilder的parseDefaulting方法存在的意义,但如果你不想用Builder,先转LocalDate再转LocalDateTime是最直观、可读性也更好的方案。
内容的提问来源于stack exchange,提问作者madhusudhan
相关产品推荐
相关产品推荐

