在MySql TIME列中保存LocalTime

时间:2018-12-11 14:04:55

标签: java mysql java-time localtime

背景故事

我最近遇到了一个问题,该问题是将LocalTime保存到MySQL数据库的TIME列中。保存值9:00导致8:00被保存在数据库中。

这个问题在我的开发环境(Windows)上没有发生,但是在我们尝试过的两台Linux机器上都发生了。

我的代码如下:

preparedStatement.setObject(parameterIndex, localTime, JDBCType.TIME);

经过调查,我最终发现MySQL JDBC驱动程序正在使用java.sql.Time.valueOf(localTime),然后使用时区设置为MySql服务器的SimpleDateFormat系统属性的system_time_zone(通过{{ 1}}),以将其打印为字符串。

在Linux机器上,time_zone = 'SYSTEM'system_time_zone,在Windows机器上是GMT。 (我在英国。)

因此,将GMT Standard Time LocalTime转换为9:00的{​​{1}}(实际上内部建模为Time),然后使用9:00 Europe/London时区,与1st January 1970 9:00 Europe/London相同。现在,通常这两个时区与1月份的UTC时差为零,但英国在1969年和1970年全年仍处于夏令时。因此减去了一个小时。

问题

GMT写入MySQL数据库以避免这种问题的最佳方法是什么?我只想要UTC,没有时区,没有日期,只有一天中的时间。我不希望它针对时区的差异进行调整,因为它只是LocalTime,而不是在任何特定的日期或地点。

目前,我只是将9:00打印为字符串,并将其发送到数据库,但是我觉得应该有更好的方法。有吗?

0 个答案:

没有答案