如何将带偏移量的时间戳转换为UTC?(Java实现)
问题解决:带偏移量的时间戳转UTC时间
错误原因分析
你当前代码存在两个核心问题:
- 类型选择错误:
LocalDate仅表示日期(年/月/日),不包含时间、毫秒和时区偏移信息,因此没有toInstant()方法。你的输入字符串包含完整的时间和偏移量,应当使用OffsetDateTime类型处理。 - 格式化器不匹配:
DateTimeFormatter.BASIC_ISO_DATE对应格式为yyyyMMdd(如20191130),和你输入的2019-11-30T00:01:00.000-06:00完全不兼容。实际上你的输入是标准ISO_OFFSET_DATE_TIME格式,无需手动指定格式化器,API默认即可解析。
正确实现代码
方法一:直接转换UTC并格式化
String text = "2019-11-30T00:01:00.000-06:00"; // 解析带偏移量的日期时间 OffsetDateTime offsetDateTime = OffsetDateTime.parse(text); // 转换为UTC时区的日期时间 OffsetDateTime utcDateTime = offsetDateTime.withOffsetSameInstant(ZoneOffset.UTC); // 输出目标格式 System.out.println(utcDateTime.format(DateTimeFormatter.ISO_INSTANT));
方法二:通过Instant转换
String text = "2019-11-30T00:01:00.000-06:00"; OffsetDateTime offsetDateTime = OffsetDateTime.parse(text); // 转换为Instant(本质为UTC时间) Instant instant = offsetDateTime.toInstant(); // 格式化输出带Z的UTC格式 System.out.println(DateTimeFormatter.ISO_INSTANT.format(instant));
两种方法最终都会输出:2019-11-30T06:01:00.000Z
内容的提问来源于stack exchange,提问作者F0cus
相关产品推荐
相关产品推荐

