Der*_*har 26 java sql timezone timestamp jdbc
在将Java Date写入SQL TIMESTAMP列之前,JDBC是否将日期从Java虚拟机时区转换为数据库会话的日期?
例如,假设Java虚拟机时区为UTC且数据库会话时区为UTC-5.如果Java程序试图2000-01-01 00:00:00
通过传递它来存储PreparedStatement#setTimestamp(int, Timestamp)
,根据JDBC标准,数据库是存储TIMESTAMP '2000-01-01 00:00:00'
还是TIMESTAMP '1999-12-31 19:00:00'
?
Buh*_*ndi 14
不,JDBC只是客户端如何访问数据库的API.对于时间戳存储,这必须由编写符合JDBC API标准的数据库驱动程序的组织所依赖.
这是MySQL实现的一个实现PreparedStatement
.他们似乎将Java的JVM时区带到MySQL Timezone(检查setTimestampInternal()
方法).
现在我的要求是它应该以GMT/UTC存储值,而不管JVM的时区.有没有办法在运行时设置时区,然后在完成JDBC后取消设置时区?
编辑:好的,我找到了解决这个问题的方法.做了以下
TimeZone default = TimeZone.getDefault();
try
{
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
//Do stuff with JDBC
}
finally
{
TimeZone.setDefault(default);
}
Run Code Online (Sandbox Code Playgroud)