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

如何使用SimpleDateFormat将UTC日期字符串转为UTC格式Date对象

核心认知纠正

java.util.Date本身不携带任何时区、格式属性,本质是对long类型毫秒时间戳的包装,存储的是从1970-01-01 00:00:00 UTC到对应时刻的毫秒偏移量,不存在「GMT格式Date对象」「UTC格式Date对象」的区别。
直接打印Date对象时看到带GMT字样的输出,是Date.toString()方法的默认逻辑:该方法会自动读取JVM当前默认时区,把内部存储的时间戳转成对应时区的可读字符串返回,这个输出效果不代表Date对象内部存储的是GMT时间。你之前写的解析代码逻辑正确,解析得到的Date时间值完全准确,不存在格式转换错误的问题。
可通过打印时间戳直接验证解析结果准确性:

System.out.println(date.getTime());

只要输出的毫秒值和UTC时间2022-06-27 08:27:00对应的毫秒数一致,就说明解析结果完全可用。

获取UTC格式时间字符串的实现

如果需要得到2022-06-27 08:27:00 UTC样式的时间文本,不需要修改Date对象,直接复用之前配置好的、设置了UTC时区的SimpleDateFormat调用format方法即可:

String newDateString = "2022-06-27 08:27:00 UTC";
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss 'UTC'");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = format.parse(newDateString);

// 格式化输出UTC格式字符串
String utcTimeStr = format.format(date);
System.out.println(utcTimeStr); // 输出:2022-06-27 08:27:00 UTC
注意事项
  • 不要尝试修改Date对象本身实现指定格式输出,Date不存储格式、时区信息,所有时间文本的解析、格式化都需要通过DateFormat类完成
  • 原有解析逻辑不需要改动,只要解析阶段给SimpleDateFormat设置了UTC时区,得到的Date时间值就是准确的
  • SimpleDateFormat的时区配置仅在字符串解析、字符串格式化两个环节生效,不会改动Date对象内部存储的时间戳

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:27:09