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

Java中数据库Timestamp转Instant后日期错误问题排查

问题原因与解决方案

问题根源

你的Date对象显示的是**CST(中国标准时间,UTC+8)**的2022-12-21 20:47:46,但toInstant()会将其转换为UTC时间戳——CST的20:47加上8小时就是UTC的次日02:47,也就是2022-12-22T02:47:46.299Z。此时你用ZoneOffset.UTC来转换LocalDate,得到的自然是UTC时区的日期22号,和你预期的CST时区日期不符。

另外你的代码存在完全冗余的操作:先把LocalDate格式化为字符串,再重新解析成LocalDate,这一步纯粹浪费性能,毫无必要。

修正后的代码

直接指定目标时区(比如CST对应的Asia/Shanghai)来转换即可:

private LocalDate getLocalDateFromTimeStamp(Row row, String key){
    Timestamp timestamp = row.getTimestamp(key);
    return timestamp.toInstant()
                    .atZone(ZoneId.of("Asia/Shanghai"))
                    .toLocalDate();
}

额外说明

如果你的数据库中存储的Timestamp本身是UTC时间,需要重新确认时区转换逻辑,但根据你调试的结果,row.getTimestamp(key)返回的是CST时间,用上述代码就能得到正确的2022-12-21。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:31:22