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
相关产品推荐
相关产品推荐

