java 8 的 java.time api 原生支持 iso-8601 字符串解析,推荐直接使用 localdatetime.parse()、offsetdatetime.parse()、zoneddatetime.parse() 或 instant.parse() 等静态方法;需严格匹配类型与格式——纯时间用 localdatetime,带偏移用 offsetdatetime/zoneddatetime,带区域 id 用 zoneddatetime,utc 时间用 instant;优先选用 datetimeformatter.iso_xxx 预定义常量而非手写 pattern,避免 datetimeparseexception 和 unsupportedtemporaltypeexception。

Java 8 的 java.time API 提供了对 ISO-8601 标准字符串的原生支持,大多数常见格式无需手动指定模式即可直接解析。
直接使用内置解析器(推荐)
LocalDateTime、ZonedDateTime、Instant 等类都内置了符合 ISO-8601 的静态解析方法:
-
LocalDateTime.parse("2023-05-12T14:30:45")→ 解析不含时区的本地日期时间 -
ZonedDateTime.parse("2023-05-12T14:30:45+08:00")→ 自动识别带偏移的时区时间 -
ZonedDateTime.parse("2023-05-12T14:30:45Z")→Z表示 UTC,等价于+00:00 -
ZonedDateTime.parse("2023-05-12T14:30:45.123+08:00[Asia/Shanghai]")→ 支持带区域 ID 的完整格式 -
Instant.parse("2023-05-12T06:30:45.123Z")→ 直接解析为 UTC 时间点
注意时区与类型匹配
ISO 字符串是否含时区信息,决定了该用哪个类型解析:
- 纯日期时间(如
"2023-05-12T14:30")→ 用LocalDateTime;它不表示具体时刻,不能直接转Instant - 带偏移(如
"+08:00"或"Z")→ 用OffsetDateTime或ZonedDateTime - 带区域 ID(如
"[Europe/London]")→ 必须用ZonedDateTime,OffsetDateTime不支持
需要自定义格式时用 DateTimeFormatter.ISO_XXX 常量
标准库已预定义多个常用 ISO 格式常量,比手写 pattern 更安全:
-
DateTimeFormatter.ISO_LOCAL_DATE_TIME→"2023-05-12T14:30:45" -
DateTimeFormatter.ISO_OFFSET_DATE_TIME→"2023-05-12T14:30:45+08:00" -
DateTimeFormatter.ISO_ZONED_DATE_TIME→"2023-05-12T14:30:45+08:00[Asia/Shanghai]" -
DateTimeFormatter.ISO_INSTANT→ 专为Instant设计,要求必须含Z或+xx:xx
用法示例:LocalDateTime.parse(str, DateTimeFormatter.ISO_LOCAL_DATE_TIME)
常见解析异常与避坑
解析失败通常因格式不严格匹配 ISO-8601 或类型误用:
-
DateTimeParseException:字符串多空格、少冒号、秒数带多余小数位(如.1234超过三位)、时区写成GMT+8(非 ISO) -
UnsupportedTemporalTypeException:用LocalDateTime.parse()去解析带Z的字符串 → 改用Instant或ZonedDateTime - 含毫秒但未对齐:ISO 允许 0–9 位小数秒,但
LocalDateTime默认只接受最多 9 位,实际兼容性良好;若需截断或补零,可先 normalize 字符串或用 formatter 显式控制
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











