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

NiFi向PostgreSQL插入Epoch时间时偏移2天问题排查求助

问题根本原因分析

这个日期偏移问题的核心是Java(NiFi依赖的运行环境)与PostgreSQL对早期日期(公元元年前后)采用了不同的历法计算规则,具体如下:

1. 时间戳对应的原始日期

你使用的时间戳 -62135596800000 是Java风格的毫秒级Epoch时间,对应UTC时间的 0001-01-01T00:00:00Z,这个结果是Java时间API(如Instant、Date)基于儒略历计算得出的——Java对公元1年到1582年10月4日之间的日期,默认使用儒略历规则。

2. PostgreSQL的历法规则差异

PostgreSQL的timestamp类型(不带时区)以及日期转换函数(如to_timestamp)默认使用扩展格里高利历(Proleptic Gregorian Calendar):即把现代的格里高利历规则回溯应用到公元元年之前的所有日期。这种规则和儒略历在早期日期的计算上存在偏移,对于0001-01-01这个节点,两者正好相差2天。

3. 验证结论

在PostgreSQL中直接执行以下命令,就能看到时间戳对应的结果:

SELECT to_timestamp(-62135596800); -- 注意这里用秒级时间戳,和你的毫秒级对应

执行结果正是你看到的 0001-01-03 00:00:00,完全匹配数据库中插入的异常日期。

额外说明

NiFi的自动UTC转换只是将JSON中的Epoch时间转为Java的UTC时间对象,但JDBC驱动在将这个Java时间传递给PostgreSQL时,PostgreSQL会按照自身的历法规则解析存储,最终导致了日期的2天偏移。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 16:57:05