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

如何在Java中将给定的ISO字符串与时区字符串转换为UTC字符串?

Java将指定时区的ISO字符串转换为UTC格式ISO 8601字符串

实现思路

  1. 先将无时区信息的ISO字符串解析为本地日期时间对象,再绑定指定时区得到带时区的日期时间实例
  2. 将带时区的日期时间转换为UTC时区的对应时间点
  3. 格式化为目标ISO 8601格式字符串

代码示例

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class TimeConverter {
    public static void main(String[] args) {
        // 输入参数
        String inputIso = "2022-12-22T18:20:00.000";
        String targetTimeZone = "US/Eastern";

        // 定义格式器,匹配输入输出的ISO格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");

        // 解析为本地时间并绑定指定时区
        LocalDateTime localDt = LocalDateTime.parse(inputIso, formatter);
        ZonedDateTime easternDt = ZonedDateTime.of(localDt, ZoneId.of(targetTimeZone));

        // 转换为UTC时区
        ZonedDateTime utcDt = easternDt.withZoneSameInstant(ZoneId.of("UTC"));

        // 格式化为目标字符串
        String utcIsoStr = utcDt.format(formatter);
        // 若需要带Z标识UTC(如2022-12-22T23:20:00.000Z),可改用:
        // String utcIsoStr = utcDt.format(DateTimeFormatter.ISO_INSTANT);

        System.out.println(utcIsoStr); // 输出:2022-12-22T23:20:00.000
    }
}

关键说明

  • 使用Java 8及以上内置的java.time包,替代旧的Date/CalendarAPI,避免线程安全问题和设计缺陷
  • withZoneSameInstant方法保证时间点的绝对一致性,仅转换时区表示
  • 两种格式化方式可按需选择:不带Z的纯数字格式,或带Z标识的标准UTC格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:55:14