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

如何解析带数字时区偏移的时间戳?解析失败求助

问题原因与解决方案

为什么解析失败?

Java 8及以上的java.time系列API(包括Instant、OffsetDateTime)默认使用的ISO 8601解析规则,要求时区偏移部分必须包含冒号(比如+01:00),但你的时间戳里的偏移是+0100(不带冒号)。虽然ISO 8601标准确实允许不带冒号的写法,但Java默认解析器并没有兼容这种格式变体,这就是抛出DateTimeParseException的原因。

正确解析的方法

你需要自定义DateTimeFormatter,匹配时间戳的具体格式,再用它来解析:

Kotlin代码实现

import java.time.OffsetDateTime
import java.time.format.DateTimeFormatter

fun main() {
    // 定义匹配格式的格式化器:Z对应不带冒号的时区偏移(如+0100)
    val customFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
    
    // 解析为OffsetDateTime
    val offsetDateTime = OffsetDateTime.parse("2022-12-12T09:51:09.681+0100", customFormatter)
    
    // 如果需要转换为Instant(UTC时间戳)
    val instant = offsetDateTime.toInstant()
    
    println("解析后的OffsetDateTime: $offsetDateTime")
    println("转换后的Instant: $instant")
}

补充说明

  • 格式字符串里的Z专门对应不带冒号的时区偏移格式;如果是带冒号的偏移(如+01:00),则用XXX。
  • 如果你只需要Instant,可以先解析成OffsetDateTime再调用toInstant(),因为Instant本身不直接支持带时区偏移的自定义格式解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:20:20