Java中解析字符串为LocalDateTime需用DateTimeFormatter配合parse()方法,严格匹配格式;ISO格式可直接解析,非ISO需自定义pattern;须处理DateTimeParseException异常;含时区字符串应先解析为ZonedDateTime再转换。

Java 中将字符串解析为 LocalDateTime 对象,主要使用 DateTimeFormatter 配合 LocalDateTime.parse() 方法。关键在于字符串格式必须与指定的格式器严格匹配,否则会抛出 DateTimeParseException。
使用预定义格式器(适用于标准 ISO 格式)
如果字符串是标准 ISO 8601 格式(如 "2023-10-05T14:30:45" 或带秒的小数部分 "2023-10-05T14:30:45.123"),可直接用内置格式器:
-
LocalDateTime.parse("2023-10-05T14:30:45")—— 默认使用DateTimeFormatter.ISO_LOCAL_DATE_TIME -
LocalDateTime.parse("2023-10-05T14:30:45.123")同样能自动识别毫秒部分
自定义格式解析(最常用场景)
多数业务字符串不是 ISO 格式(如 "2023-10-05 14:30:45"、"2023/10/05 14:30"),需显式创建格式器:
- 用
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")定义模式 - 调用
LocalDateTime.parse(str, formatter)解析 - 注意:字母大小写敏感,
HH表示24小时制,hh是12小时制;MM是月份,mm是分钟
示例:
立即学习“Java免费学习笔记(深入)”;
String str = "2023-10-05 14:30:45";DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dt = LocalDateTime.parse(str, f);
处理可能的异常
解析失败会抛出 DateTimeParseException,建议包裹在 try-catch 中:
- 检查字符串是否为空或 null,提前拦截
- 捕获异常后可记录日志、返回默认值或抛出自定义业务异常
- 不要忽略异常或用空的 catch 块
注意时区和日期时间分离问题
LocalDateTime 本身不含时区信息,所以:
- 若原始字符串含时区(如
"2023-10-05T14:30:45+08:00"),不能直接用LocalDateTime.parse() - 应先解析为
ZonedDateTime或OffsetDateTime,再用.toLocalDateTime()转换(此时会丢掉时区,仅保留本地时间) - 若需保留时区语义,不应使用
LocalDateTime,而应选用ZonedDateTime


















