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

解析yyyy-MM-dd HH:mm:ss.SSSSSSS格式日期为Date报错原因及解决

日期解析失败原因及解决方法

为什么无法解析?

代码抛出ParseException的核心原因是日期格式字符串与输入的日期字符串完全不匹配:

  • 输入日期的日期部分是年-月-日(用连字符-分隔),但你使用的格式字符串是dd/MM/yyyy(用斜杠/分隔,顺序为日/月/年),分隔符和日期顺序均不匹配
  • 输入日期包含7位毫秒后缀.0117372,但你的格式字符串仅定义到秒ss,没有匹配毫秒部分的规则,导致解析器无法识别该内容

正确解析的两种方案

方案1:修正SimpleDateFormat的格式字符串(旧API)

若仍需使用SimpleDateFormat,需调整格式字符串完全匹配输入结构:

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

public class DateParseDemo {
    public static void main(String[] args) {
        String dateStr = "2020-04-14 16:34:40.0117372";
        // 格式字符串匹配:年-月-日 时:分:秒.7位毫秒
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSSS");
        try {
            Date date = sdf.parse(dateStr);
            String formattedDate = sdf.format(date);
            System.out.println(formattedDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

方案2:使用Java 8+的java.time新API(推荐)

SimpleDateFormat存在线程不安全问题,Java 8及以上推荐使用线程安全、功能更完善的java.time包:

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

public class LocalDateTimeParseDemo {
    public static void main(String[] args) {
        String dateStr = "2020-04-14 16:34:40.0117372";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSS");
        LocalDateTime dateTime = LocalDateTime.parse(dateStr, formatter);
        String formattedDate = dateTime.format(formatter);
        System.out.println(formattedDate);
    }
}

注:DateTimeFormatter默认严格匹配格式,若输入存在格式不一致的情况,可通过withResolverStyle调整解析宽松度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:09:24