我需要从本地时间 ut UTC 转换现有的(日期时间字段)数据库。
这些值存储在具有 CET (+1) 时区(夏令时 +2)的服务器上的广告日期时间。选择数据时,我使用 UNIX_TIMESTAMP()
,它神奇地补偿了所有内容,即时区偏移和 dst(如果我正确阅读了文档)。
我正在将 db 移动到以 UTC 作为系统时间的新服务器。
简单地减去 -1 H 是行不通的,因为夏令时是 +2。
有什么聪明的方法可以做到这一点吗? (使用 sql 或一些脚本语言)
最佳答案
首先,您需要确保填充了 mysql.time_zone_name 表。如果它是空的,您可以按照此页面上的说明进行填充:
http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html
通常就像在 shell 中运行这样的命令一样简单:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
填充该表后,您可以使用 CONVERT_TZ() 函数更新数据库中的现有值:
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_convert-tz
以下两个示例展示了它如何在冬季和夏季将日期时间从 CET 转换为 UTC:
mysql> SELECT CONVERT_TZ('2010-01-22 12:00:00','CET','UTC');
+-----------------------------------------------+
| CONVERT_TZ('2010-01-22 12:00:00','CET','UTC') |
+-----------------------------------------------+
| 2010-01-22 11:00:00 |
+-----------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT CONVERT_TZ('2010-07-22 12:00:00','CET','UTC');
+-----------------------------------------------+
| CONVERT_TZ('2010-07-22 12:00:00','CET','UTC') |
+-----------------------------------------------+
| 2010-07-22 10:00:00 |
+-----------------------------------------------+
1 row in set (0.00 sec)
关于Mysql:将数据库从本地时间转换为UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2689428/