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

Java中SQL Timestamp转换为OffsetDateTime失败的解决求助

解决SQL Timestamp转OffsetDateTime的问题

你的问题出在两个核心点:一是用了ISO_OFFSET_DATE_TIME格式化器,但它要求的是带时区偏移的日期格式(比如2023-07-17T12:22:02.626948+08:00),而你拿到的日期字符串没有时区信息,格式完全不匹配;二是没必要把Timestamp转成字符串再解析,直接类型转换更高效靠谱。

给你两种可行的解决方法:

方法一:直接转换Timestamp(推荐)

row.get("date_column")返回的本质是java.sql.Timestamp对象,直接转成OffsetDateTime即可,不用绕字符串:

// 先强转成Timestamp类型
Timestamp timestamp = (Timestamp) row.get("date_column");
// 转成Instant后,指定时区得到OffsetDateTime(这里用系统默认时区,也可换成ZoneOffset.UTC等业务需要的时区)
OffsetDateTime dateColumn = timestamp.toInstant().atOffset(ZoneOffset.systemDefault());

方法二:自定义格式化器解析字符串(仅当必须用字符串处理时用)

如果一定要通过字符串解析,得先定义匹配你日期格式的格式化器,再给解析出的LocalDateTime补充时区信息转成OffsetDateTime:

// 自定义匹配"yyyy-MM-dd HH:mm:ss.SSSSSS"格式的格式化器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");
// 先解析成LocalDateTime(原字符串无时区,只能先转这个类型)
LocalDateTime localDateTime = LocalDateTime.parse(row.get("date_column").toString(), formatter);
// 指定时区转成OffsetDateTime,比如系统默认时区或UTC
OffsetDateTime dateColumn = localDateTime.atOffset(ZoneOffset.systemDefault());

注意:原日期字符串没有时区信息,所以必须手动指定一个合法时区(比如系统默认、业务要求的时区),否则无法生成OffsetDateTime——因为OffsetDateTime强制要求包含时区偏移量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:52:04