如何在Java中将给定的ISO字符串与时区字符串转换为UTC字符串?
Java将指定时区的ISO字符串转换为UTC格式ISO 8601字符串
实现思路
- 先将无时区信息的ISO字符串解析为本地日期时间对象,再绑定指定时区得到带时区的日期时间实例
- 将带时区的日期时间转换为UTC时区的对应时间点
- 格式化为目标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
相关产品推荐
相关产品推荐

