【发布时间】:2013-10-07 09:09:55
【问题描述】:
我有一个代表 UTC 时间的 Joda DateTime 对象,并希望将其存储在 MySql 表的 Timestamp 字段中。
我有以下代码:
String ztime = "2013-10-07T08:00:00Z";
DateTimeFormatter parser = ISODateTimeFormat.dateTimeParser();
DateTime dt = parser.parseDateTime(ztime).withZone(DateTimeZone.UTC);
PreparedStatement stmt = con.prepareStatement("insert into time_test (time) values (?)");
stmt.setTimestamp(1, Timestamp(dt.getMillis()));
stmt.execute();
但是,当我查看数据库时,存储的时间因我的数据库时区与 UTC 的差异而超出。 例如当我的数据库在 UTC+1 运行时,运行上面的代码保存“08:00Z”,在数据库中时间戳显示为 09:00。
DateTime 的 getMillis 方法说“从 1970-01-01T00:00:00Z 的 Java 纪元获取日期时间瞬间的毫秒数。” MySql 的 Timestamp 说:“MySQL 将 TIMESTAMP 值从当前时区转换为 UTC 进行存储,然后从 UTC 转换回当前时区进行检索。”, 所以我认为这是导致问题的 MySql 转换,因为它正在初始化的毫秒是相对于固定的 UTC 时间,所以它不需要从当前时区转换为 UTC。
我将数据读回 DateTime 的代码工作正常,并且我得到了我输入的值,但我还需要它来处理一些第 3 方代码 我无法控制,它希望时间戳处于正确的 UTC 时间。
如何让数据库中的 Timestamp 字段与我原来的 UTC 日期/时间相匹配?
【问题讨论】:
标签: java mysql datetime timestamp utc