【问题标题】:JDBC give MySQL datetime in UTCJDBC 以 UTC 为 MySQL 日期时间
【发布时间】:2012-05-18 07:41:28
【问题描述】:

我的 Java:

Date parsedDate = dateFormat.parse(timestamp);
Timestamp dbTimestamp = new Timestamp(parsedDate.getTime());       
insertTimestampPreparedStatement.setTimestamp(3, dbTimestamp);

PhpMyAdmin/MySQL 总是在我的当地时间显示这个,即使我这样做了

insertTimestampPreparedStatement.setTimestamp(3, dbTimestamp, Calendar.instance(TimeZone.getTimeZone("UTC"));

我不确定 MySQL 是否存储它们知道时区,我检查这一点的唯一方法是直接在 phpmyadmin 中将时区行更新为 NOW(),然后它向我显示了 GMT 时间。所以要么 phpmyadmin/mysql 中存在错误,要么我的代码没有在正确的时区发送时间戳。

如何让它在 UTC 中工作?

【问题讨论】:

    标签: mysql jdbc timezone


    【解决方案1】:

    JDBC 驱动程序必须在检索或存储时间戳时使用本地时区,除非提供了具有特定时区的日历。

    不幸的是,JDBC 规范并不总是清楚驱动程序的行为方式,而且看起来 MySQL 做错了。对于 MySQL,您可以通过在连接字符串 serverTimeZone 和相关属性中指定一个或多个选项来强制它使用的时区。有关完整列表,请参阅 http://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html

    【讨论】:

    • 必须使用本地时区”:除非时间戳存储我假设的时区? (虽然与 MySQL 无关)
    • @a_horse_with_no_name 如果数据库有时区信息,那么驱动程序在检索时应使用该信息,在存储时仍应默认为本地时区。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2013-08-10
    • 2010-11-23
    • 2012-12-06
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多