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

Java中如何将UTC日期时间转换为带+00:00的ISO 8601格式?

如何将UTC日期格式化为带+00:00的ISO 8601格式(而非Z结尾)

我完全理解你的需求——出于向后兼容的硬性要求,必须把UTC时间格式化成2020-02-28T14:10:23+00:00这种形式,而非带Z的标准ISO格式。用字符串替换确实是不够优雅的临时方案,这里有两种更规范的解决办法,分Java版本给你说明:

一、Java 8及以上:使用java.time新API(推荐)

Java 8引入的日期时间API(java.time包)比老旧的SimpleDateFormat更安全、灵活,能直接满足你的格式需求。只需要指定UTC时区,搭配对应的格式模式即可:

import java.time.Instant;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

public class DateTimeFormatDemo {
    public static void main(String[] args) {
        DateTimeFormatter utcFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX")
                .withZone(ZoneOffset.UTC);
        System.out.println(utcFormatter.format(Instant.now()));
    }
}

这里的XXX格式符在UTC时区下会直接输出+00:00,完美匹配你的要求。而且新API是线程安全的,避免了SimpleDateFormat的线程安全隐患。

二、Java 7及以下:自定义SimpleDateFormat的时区符号

如果你的项目还停留在旧版Java,无法使用新API,也不用依赖字符串替换——可以通过修改DateFormatSymbols来改变UTC时区的输出符号:

import java.text.DateFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class LegacyDateFormatDemo {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
        DateFormatSymbols symbols = new DateFormatSymbols();
        // 替换UTC对应的偏移符号,把默认的Z改成+00:00
        symbols.setZoneStrings(new String[][]{
                {"UTC", "UTC", "UTC", "+00:00", "+00:00", "+00:00"}
        });
        sdf.setDateFormatSymbols(symbols);
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
        System.out.println(sdf.format(new Date()));
    }
}

这个方法通过修改时区符号数组,让SimpleDateFormat在处理UTC时区时输出+00:00,比字符串替换更符合格式化的规范逻辑。

补充说明:Z其实是UTC时间的标准表示(祖鲁时间),但你的向后兼容需求完全合理,上面的两种方案都能规避字符串替换的弊端,更可靠地实现目标格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:22:49