当前位置:  开发笔记 > 编程语言 > 正文

如何将java.util.Date存储到UTC/GMT时区的MySQL时间戳字段中?

如何解决《如何将java.util.Date存储到UTC/GMT时区的MySQL时间戳字段中?》经验,为你挑选了1个好方法。

我使用了一个新的Date()对象来填充MySQL DB中的字段,但是该字段中存储的实际值是在我的本地时区.

如何配置MySQL以将其存储在UTC/GMT时区?

我认为,配置连接字符串会有所帮助,但我不知道如何.连接字符串中有许多属性,如useTimezone,serverTimzone,useGmtMillisForDatetimes,useLegacyDatetimeCode,...



1> MiniQuark..:

简短的回答是:

将"default-time-zone = utc"添加到my.cnf

在您的代码中,除了为您的用户显示日期外,始终以UTC"思考"

使用JDBC获取/设置日期或时间戳时,请始终使用Calendar参数,设置为UTC:

resultset.getTimestamp("my_date",Calendar.getInstance(TimeZone.getTimeZone("UTC")));

要么将服务器与NTP同步,要么仅依靠数据库服务器告诉您它的时间.


答案很长就是这样的:

在处理任何数据库中的日期和时区以及任何客户端代码时,我通常建议使用以下策略:

    将数据库配置为使用UTC时区,而不是使用服务器的本地时区(当然,除非它是UTC).

    如何操作取决于您的数据库服务器.有关MySQL的说明,请访问:http://dev.mysql.com/doc/refman/5.0/en/time-zone-support.html.基本上你需要在my.cnf中写这个:default-time-zone = utc

    这样,您可以在任何地方托管数据库服务器,轻松更改托管位置,以及更一般地操作服务器上的日期而不会产生任何歧义.

    如果您真的更喜欢使用本地时区,我建议至少关闭夏令时,因为在您的数据库中设置含糊不清的日期可能是一场真正的噩梦.

    例如,如果您正在构建电话服务并且您在数据库服务器上使用夏令时,那么您就会遇到麻烦:无法判断是否有客户从"2008-10-26 02:30"致电:00"到"2008-10-26 02:35:00"实际呼叫5分钟或1小时5分钟(假设夏令时发生在10月26日凌晨3点)!

    在应用程序代码中,除了向用户显示日期外,始终使用UTC日期.

    在Java中,从数据库中读取时,始终使用:

    时间戳myDate = resultSet.getTimestamp("my_date",Calendar.getInstance(TimeZone.getTimeZone("UTC")));

    如果不这样做,则假定时间戳位于本地TimeZone中,而不是UTC.

    同步服务器或仅依赖数据库服务器的时间

    如果您的Web服务器在一台服务器(或更多)上,而您的数据库服务器在其他服务器上,那么我强烈建议您将它们的时钟与NTP同步.

    或者,只依靠一台服务器告诉你它的时间.通常,数据库服务器是最好的时间.换句话说,避免使用如下代码:

    preparedStatement = connection.prepareStatement("UPDATE my_table SET my_time =?WHERE [...]");
    java.util.Date now = new java.util.Date(); // 当地时间!:-(
    preparedStatement.setTimestamp(1,new Timestamp(now.getTime()));
    int result = preparedStatement.execute();

    相反,依赖数据库服务器的时间:

    preparedStatement = connection.prepareStatement("UPDATE my_table SET my_time = NOW()WHERE [...]");
    int result = preparedStatement.execute();

希望这可以帮助!:-)

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有