You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何将ISO 8601格式字符串解析为Date对象?

错误原因
  • 输入的ISO 8601格式字符串使用T作为日期和时间的分隔符,你定义的SimpleDateFormat解析模式串用了空格占位,格式完全不匹配,因此触发解析异常。
  • 模式符使用错误:大写M对应的是月份,小写m才对应分钟,原写法HH:MM:ss会把分钟位的数值识别为月份,即使解决了T的匹配问题,最终也会得到错误的时间结果。
修复方案

方案1:修正SimpleDateFormat写法(适配Java 8之前的版本)

修改解析用的模式串,转义T字符并将分钟的模式符改为小写m即可:

import java.text.SimpleDateFormat;
import java.util.Date;

public class Test {
    public static void main(String[] args) throws Exception {
        String date = "2021-05-14T09:26:20";
        // T用单引号转义,分钟使用小写m
        SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date newDate = parser.parse(date);
        System.out.println(format.format(newDate));
    }
}

方案2:使用Java 8+ 新时间API(更推荐)

java.time包是Java 8之后推出的官方时间处理API,原生支持ISO 8601格式,无需手动拼接复杂的模式串,且天生线程安全,不存在SimpleDateFormat的多线程并发问题:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Test {
    public static void main(String[] args) {
        String date = "2021-05-14T09:26:20";
        // 原生支持ISO 8601格式,直接解析即可
        LocalDateTime dateTime = LocalDateTime.parse(date);
        // 按需求格式化输出
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        System.out.println(dateTime.format(formatter));
        
        // 如果业务确实需要转为java.util.Date对象,可使用以下方式转换
        // Date newDate = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
    }
}

内容的提问来源于stack exchange,提问作者user12755870

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 15:45:01