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

Java中解析带单小时位偏移的字符串日期时间

嘿,这个问题我之前也碰到过!你遇到的报错根源是偏移格式的匹配问题:

  • 你一开始用的Z模式对应不带冒号的RFC 822偏移格式(比如+0300),完全不匹配+3:00;
  • 后来用的XXX模式虽然支持带冒号的偏移,但它默认要求小时是两位(比如+03:00),所以遇到+3:00这种一位小时的格式就会在索引26处报错。

给你两种简单靠谱的解决方法:

方法一:用支持灵活偏移的X模式(推荐)

X是ISO-8601风格的偏移模式,它能自动适配多种偏移格式——不管是+3、+300、+3:00还是+03:00都能完美匹配。你只需要把格式字符串改成下面这样就行:

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

public class DateParseDemo {
    public static void main(String[] args) {
        String dateStr = "2018-05-15 09:32:51.550082 +3:00";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS X");
        ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateStr, formatter);
        System.out.println("解析结果:" + zonedDateTime);
    }
}

方法二:自定义偏移格式(更灵活可控)

如果需要更精确地控制偏移的匹配规则,可以用DateTimeFormatterBuilder来构建格式,明确允许小时是一位或两位:

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;

public class DateParseDemo {
    public static void main(String[] args) {
        String dateStr = "2018-05-15 09:32:51.550082 +3:00";
        DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                .appendPattern("yyyy-MM-dd HH:mm:ss.SSSSSS ")
                .appendOffset("+H:mm", "+HH:mm", "Z") // 同时支持一位/两位小时的偏移
                .toFormatter();
        ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateStr, formatter);
        System.out.println("解析结果:" + zonedDateTime);
    }
}

两种方法都能成功解析你的日期字符串,第一种更简洁,日常用完全足够~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:52:45