背景故事
我最近遇到了一个保存一个 LocalTime
到 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
是 GMT
,在windows机器上 GMT Standard Time
. (我在英国。)
所以
LocalTime 9:00
已转换为 Time
的 9:00 Europe/London
(实际上内部建模为 1st January 1970 9:00 Europe/London
),然后用 GMT
时区,与 UTC
. 现在,通常这两个时区与1月份的utc的偏移量为零,但英国在1969年和1970年全年都保持夏时制。所以减去了一个小时。
问题
写一篇文章最好的方法是什么 LocalTime
到mysql数据库,避免这种问题?我只是想 9:00
,没有时区,没有日期,只有一天的时间。我不想让它适应时区的不同,因为它只是 9:00
,而不是在任何特定的日子或地点。
现在我正在打印 LocalTime
作为一个字符串,并发送到数据库,但我觉得应该有一个更好的方法。有?
暂无答案!
目前还没有任何答案,快来回答吧!