我有一个代表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。
我的读取数据的代码可以正常工作,并且我得到了我输入的值,但我还需要将其与某些第三方代码配合使用,这些代码我无法控制,这些代码期望时间戳处于正确的UTC时间。
如何使数据库中的时间戳字段与我的原始UTC日期/时间匹配?