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

Java中SimpleDateFormat格式化结果不一致问题求助

问题原因分析

核心原因:时区差异

输入的日期字符串2022-10-12T00:00:00.000Z是UTC标准时间(后缀Z代表UTC时区)。而你代码中使用的SimpleDateFormat类,默认会采用当前JVM运行环境的本地时区来格式化日期:

  • 在线IDE的JVM时区大概率被设置为UTC,所以直接将UTC时间格式化为2022-10-12;
  • 本地JVM如果使用东八区(比如北京时间),UTC的2022-10-12 00:00对应东八区的2022-10-11 20:00,此时格式化日期就会得到2022-10-11。

次要问题:新旧日期API混用

你的代码同时使用了Java 8+的新日期API(Instant、DateTimeFormatter)和旧API(SimpleDateFormat、Date),两套API的时区处理逻辑不统一,进一步放大了结果的不确定性。

解决方案

推荐统一使用Java 8+的新日期API,并明确指定时区,避免依赖环境默认配置:

String dateStr = "2022-10-12T00:00:00.000Z";
// 明确指定输出时区为UTC,保证结果稳定
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
        .withZone(ZoneId.of("UTC"));
Instant instant = Instant.parse(dateStr);
String formattedDate = formatter.format(instant);
// 输出结果固定为2022-10-12

如果需要按本地时区格式化,只需将ZoneId.of("UTC")替换为ZoneId.systemDefault()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:35:27