我有一个代表 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 日期/时间?