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

如何从包含UTC后缀的时间字符串解析生成LocalDateTime或Instant对象

解析带UTC标识的时间字符串方案

你原有代码的格式串没有匹配末尾的UTC时区标识,UTC属于时区短名称,对应DateTimeFormatter的模式符为z,调整格式串即可完成解析,以下是两种目标对象的实现方式:


1. 解析为Instant对象

Instant本身代表UTC时间线上的瞬时点,适合用来做时间存储、跨时区时间计算,解析代码如下:

import java.time.Instant;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class TimeParseDemo {
    public static void main(String[] args) {
        String dateTime = "2021-09-17 11:48:06 UTC";
        // 构造匹配UTC标识的格式化器,指定Locale避免不同地区解析异常
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z", Locale.US);
        ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateTime, formatter);
        Instant instant = zonedDateTime.toInstant();
        System.out.println(instant); // 输出:2021-09-17T11:48:06Z
    }
}

2. 解析为LocalDateTime对象

LocalDateTime不携带时区信息,需要先解析为带时区的ZonedDateTime,再根据需求转换为对应时区的LocalDateTime:

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class TimeParseDemo {
    public static void main(String[] args) {
        String dateTime = "2021-09-17 11:48:06 UTC";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z", Locale.US);
        ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateTime, formatter);

        // 情况1:保留原UTC时区的时间数值,输出时分秒和原字符串一致
        LocalDateTime utcLocalDateTime = zonedDateTime.withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime();
        System.out.println(utcLocalDateTime); // 输出:2021-09-17T11:48:06

        // 情况2:转换为指定时区对应的本地时间,示例为东8区北京时间
        LocalDateTime beijingLocalDateTime = zonedDateTime.withZoneSameInstant(ZoneId.of("Asia/Shanghai")).toLocalDateTime();
        System.out.println(beijingLocalDateTime); // 输出:2021-09-17T19:48:06
    }
}

注意事项

  • 构造DateTimeFormatter时指定Locale.US,避免不同系统地区默认配置导致时区短名称解析失败。
  • 不建议直接用LocalDateTime.parse解析带时区的时间字符串,会丢失时区上下文,后续时间运算容易出现偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:27:03