Java字符串转LocalDateTime报DateTimeParseException及日期加3个月问题求解
错误原因&修复方案
核心错误点
- 日期格式的分隔符不匹配:输入字符串用
/分隔年月日,你定义的格式化模式使用了-,导致解析到索引2位置时识别失败,直接抛出异常。 - 直接解析纯日期字符串为
LocalDateTime:LocalDateTime必须包含日期、时间两部分信息,你的输入仅提供了年月日,缺少时分秒字段,就算修复分隔符问题也会继续抛出解析异常。 - 未接收时间运算的返回值:Java 8提供的
java.time包下所有时间类都是不可变类,调用plusXXX、minusXXX方法都不会修改原对象,只会返回一个全新的时间对象,你原有代码调用plusMonths后没有赋值给新变量,最终打印的还是原日期。
修复后完整代码
import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class DateConvertDemo { public static void main(String[] args) { String dateStr = "13/11/2020"; // 修正格式化模式,和输入字符串分隔符保持一致 DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); // 先解析纯日期为LocalDate LocalDate originDate = LocalDate.parse(dateStr, dateFormatter); // 转换为LocalDateTime,此处默认补0时0分0秒,也可按需指定具体时间 LocalDateTime originDateTime = originDate.atStartOfDay(); // 接收加3个月后的新时间对象 LocalDateTime resultDateTime = originDateTime.plusMonths(3); // 按要求格式输出结果 System.out.println(resultDateTime.format(dateFormatter)); } }
运行结果
输出内容为:13/02/2021,符合需求。
内容的提问来源于stack exchange,提问作者Khanh Van Luong
相关产品推荐
相关产品推荐

