Mysql:将数据库从本地时间转换为UTC

标签 mysql timezone utc unix-timestamp

我需要从本地时间 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/

相关文章:

php - Wordpress 在相同配置上显示错误的时间

c# - DateTime.Now 与 DateTime.UtcNow 用法的区别

java - 用Java查找自2004年1月1日UTC 00:00:00以来的TAI秒数

php - Left Join PHP/SQL with LIKE 和逻辑 AND

mysql - 如何选择所有子行

php - 转换mysql时间格式00 :00:00 to 00:00 AM/PM with PHP

mysql - 哪一个运行起来更安全/更好?

objective-c - 获取日期与 [NSDate date] 相差几个小时

javascript - 在不使用 Geonames.org 等 Web 服务的情况下根据纬度/经度确定时区

javascript - 从今天的本地时间获取 UTC 时间戳