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

如何将带偏移量的日期时间字符串解析为LocalDateTime并确定其格式?

解决日期字符串解析问题:自定义DateTimeFormatter匹配格式

首先,你遇到的问题是因为ISO_OFFSET_DATE_TIME的格式和你的目标字符串完全不匹配——这个预定义格式对应的是类似2021-10-09T02:10:23-04:00的结构,而你的字符串是带星期缩写、月份缩写的RFC风格日期,所以必须自定义格式器才能正确解析。

步骤1:拆解日期字符串的结构

我们把你的字符串Sat, 09 Oct 2021 02:10:23 -0400拆分成各个组件,对应Java DateTimeFormatter的模式符:

  • Sat:英文星期缩写 → 模式符EEE
  • ,:字面逗号 → 直接写,
  • 09:两位日期 → 模式符dd
  • Oct:英文月份缩写 → 模式符MMM
  • 2021:四位年份 → 模式符yyyy
  • 02:10:23:24小时制时分秒 → 模式符HH:mm:ss
  • -0400:四位数字的时区偏移(±HHMM) → 模式符XX

步骤2:编写自定义格式器并解析

需要注意的是,因为月份和星期是英文缩写,必须指定Locale.ENGLISH,否则默认Locale如果不是英文会解析失败。另外,你的字符串包含时区偏移信息,先解析为ZonedDateTime保留完整时区语义,再转LocalDateTime会更严谨:

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

public class DateParseExample {
    public static void main(String[] args) {
        String s = "Sat, 09 Oct 2021 02:10:23 -0400";
        // 自定义匹配格式,指定英文Locale
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss XX", Locale.ENGLISH);
        
        ZonedDateTime zonedDateTime = ZonedDateTime.parse(s, formatter);
        LocalDateTime dateTime = zonedDateTime.toLocalDateTime();
        
        System.out.println(dateTime); // 输出:2021-10-09T02:10:23
    }
}

快速确定格式的小技巧

记住几个常用模式符的对应关系,把它们按字符串顺序拼接,再加上必要的字面符号(逗号、空格等)即可:

  • 星期:E(短缩写,如Sat)、EEEE(全称,如Saturday)
  • 日期:d(1-2位)、dd(两位补零)
  • 月份:M(数字1-12)、MM(两位数字)、MMM(缩写)、MMMM(全称)
  • 年份:yyyy(四位)、yy(两位)
  • 时区:XX(±HHMM,如-0400)、XXX(±HH:MM,如-04:00)、ZZZZ(GMT±HHMM,如GMT-0400)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:37:46