背景故事
我最近在保存时遇到了一个问题LocalTime
to a TIME
MySQL 数据库中的列。节省价值9:00
正在引起8:00
保存在数据库中。
这个问题没有出现在我的开发环境(Windows)上,但出现在我们尝试的两台 Linux 机器上。
我的代码如下:
preparedStatement.setObject(parameterIndex, localTime, JDBCType.TIME);
经过调查,我最终发现MySQL JDBC驱动程序正在使用java.sql.Time.valueOf(localTime)
,然后使用SimpleDateFormat
其时区设置为 MySql 服务器的时区system_time_zone
系统属性(通过time_zone = 'SYSTEM'
),将其打印为字符串。
在 Linux 机器上,system_time_zone
was GMT
,在 Windows 机器上,它是GMT Standard Time
。 (我在英国。)
So, the LocalTime
9:00
被转换为Time
of 9:00 Europe/London
(实际上内部建模为1st January 1970 9:00 Europe/London
),然后使用GMT
时区,其处理方式与UTC
。现在,通常这两个时区在一月份与 UTC 的偏移量为零,但英国在 1969 年和 1970 年全年都保持夏令时。因此减去了一个小时。
Question
最好的写法是什么LocalTime
到MySQL数据库,避免这种问题?我只是想9:00
,没有时区,没有日期,只有一天中的时间。我不希望它根据时区差异进行调整,因为它只是9:00
,不是在任何特定的日子或地点。
目前我只是打印LocalTime
作为字符串,并将其发送到数据库,但我觉得应该有更好的方法。有没有?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)