如何在Java中将"2020-03-11 16:27:31"转为"2020-03-11T16:27:31+00:00"格式
在Java中转换日期格式:"2020-03-11 16:27:31" → "2020-03-11T16:27:31+00:00"
别担心,这个转换用Java 8及以上版本引入的java.time日期时间API就能轻松搞定——这也是官方现在极力推荐的方案,比旧的Date/Calendar类好用太多,还自带线程安全属性。下面一步一步给你讲清楚:
核心思路
你的目标格式是带UTC时区偏移的ISO标准日期时间格式,所以我们需要完成两个核心步骤:
- 把原始的无时区日期字符串解析成本地日期时间对象
- 给这个本地时间加上UTC时区偏移,再格式化成目标格式
完整代码示例
import java.time.LocalDateTime; import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; public class DateConverter { public static void main(String[] args) { // 原始日期字符串 String originalDateStr = "2020-03-11 16:27:31"; // 1. 解析原始字符串为LocalDateTime(无时区信息) DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime localDateTime = LocalDateTime.parse(originalDateStr, inputFormatter); // 2. 为本地时间添加UTC时区偏移,得到带时区的OffsetDateTime OffsetDateTime utcDateTime = localDateTime.atOffset(ZoneOffset.UTC); // 3. 格式化为目标字符串(用内置的ISO标准格式器,不用自己写复杂模式) DateTimeFormatter outputFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME; String targetDateStr = utcDateTime.format(outputFormatter); // 输出结果:2020-03-11T16:27:31+00:00 System.out.println(targetDateStr); } }
关键细节补充
- 解析时用的
HH是24小时制的小时格式,如果你的原始字符串是12小时制(比如带AM/PM标识),要改成hh并加上a模式,例如yyyy-MM-dd hh:mm:ss a DateTimeFormatter.ISO_OFFSET_DATE_TIME是JDK内置的标准格式器,刚好匹配你需要的yyyy-MM-dd'T'HH:mm:ssXXX格式,不用手动拼接复杂的模式字符串- 如果你的原始日期实际是某个特定时区的时间(比如北京时间东8区),而非UTC时间,那需要先把本地时间绑定到对应时区,再转成UTC:
import java.time.ZoneId; import java.time.ZonedDateTime; // 替换第二步的代码: ZonedDateTime beijingDateTime = localDateTime.atZone(ZoneId.of("Asia/Shanghai")); OffsetDateTime utcDateTime = beijingDateTime.toOffsetDateTime().withOffsetSameInstant(ZoneOffset.UTC);
为什么推荐用java.time API?
旧的SimpleDateFormat和Date类不仅线程不安全,而且API设计混乱,处理时区和日期转换时很容易踩坑。java.time包是JSR-310规范的实现,设计更清晰,功能更强大,几乎能覆盖所有日期时间处理场景。
内容的提问来源于stack exchange,提问作者Rochit Aggarwal
相关产品推荐
相关产品推荐

