java - 意外的 MySQL DATETIME 行为

标签 java mysql datetime

当我试图从我的 Java 应用程序向我的表中插入值时,我发现 MySQL DATETIME 出现了我认为意想不到的行为。我已经阅读了很多关于 DATETIME 的 StackOverflow 问题和答案,但这似乎是一个完全不同的问题。

我的 Java 应用程序使用 MyBatis 和 this DateTimeTypeHandler插入一个 joda DateTime 值 2015-03-04T22:30:59.922Z。 (我还修改了上面的代码以使用 setTimestamp(int, Timestamp, Calendar) 方法,但没有注意到结果的差异)。

我看到插入到表中的是值 2015-03-04 14:30:59.922。我读到 MySQL DATETIME 使用服务器默认时区。我住在 PDT 时区,所以我希望该值为 2015-03-04 15:30:59.922(即 15:30 而不是 14:30)。

令人惊讶的是,MySQL 中似乎没有任何内容指示 PDT 时区。那么,为什么表中的日期时间值会是 2015-03-04 14:30:59.922?

mysql> 选择@@global.time_zone; +--------------------+ | @@global.time_zone | +--------------------+ |协调世界时 | +--------------------+ 一组中的 1 行(0.06 秒)

mysql> 选择@@session.time_zone; +--------------------+ | @@session.time_zone | +--------------------+ |协调世界时 | +--------------------+ 一组中的 1 行(0.07 秒)

mysql> 选择@@system_time_zone; +--------------------+ | @@system_time_zone | +--------------------+ |协调世界时 | +--------------------+ 一组中的 1 行(0.07 秒)

最佳答案

2015 年 3 月 4 日是标准时间,因此时差为 -8 小时:

UTC (Time Zone)                   Wednesday, March 4, 2015 at 10:30:00 PM     UTC         
Los Angeles (U.S.A. - California) Wednesday, March 4, 2015 at 2:30:00 PM  PST UTC-8 hours 

今天(2015 年 5 月 28 日)是夏令时,所以时差是 -7 小时:

UTC (Time Zone)                   Thursday, May 28, 2015 at 10:30:00 PM     UTC         
Los Angeles (U.S.A. - California) Thursday, May 28, 2015 at 3:30:00 PM  PDT UTC-7 hours 

关于java - 意外的 MySQL DATETIME 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30515380/

相关文章:

在 Matlab 中验证具有给定格式的日期

java - 简单的java线程测试程序不起作用

Java 反射 : What does my Collection contain?

java - 为什么我的光标返回一些不正确的信息?

mysql - Mysql 中的 Md5 和 Salt

php - 无法使用 PHP 和 MySQl 将图像加载到网页

java - 为什么在映射到 Callable<T> 时需要显式提供类型参数?

mysql - Mysql自动更新2表或多表

python - 按时间间隔对消息分组

python-2.7 - Python2 : Retrieve Sunday - Saturday Week Start/End Dates For Given Date Range