【发布时间】:2016-01-21 01:05:27
【问题描述】:
我的表格包含一个日期时间字段:
`RunEndTime` datetime DEFAULT NULL,
它作为 UTC 时间戳插入:
statement.setTimestamp(RUN_END_TIME, runStartTime, UTC_CALENDAR);
我们在哪里
Calendar UTC_CALENDAR = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
当我使用 SQL 查询时的效果
SELECT RunEndTime, unix_timestamp(RunEndTime) ...
我得到以下不同的结果:
rs.getTimestamp(1); // 1445423199000
rs.getTimestamp(1, UTC_CALENDAR); // 1445423199000
rs.getLong(2); // 1445408799
选择unix_timestamp 会给出不同的结果,而且它是唯一准确的结果。另外两个是EDT,也就是客户端程序的位置。如何正确使用getTimestamp?
【问题讨论】:
-
是否为 MySQL 设置了
time_zone? -
@Tunaki 设置为 SYSTEM,基于 SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP()); 看起来像 UTC;
-
查看JDBC/MySQL: Save timestamp always using UTC -- 可能是您受到TimeZone discarded storing java.util.Calendar into DATETIME 错误的影响,必须通过在连接器URL 中传入
useLegacyDatetimeCode=false来启用错误修复。 -
@Drew 这有什么关系?
-
位寄存器溢出
标签: java mysql sql datetime jdbc