存储和比较多个时区的时间

时间:2013-10-31 13:24:36

标签: mysql timezone

我有这张桌子:

CREATE TABLE IF NOT EXISTS `config` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `time` time NOT NULL,
  `zone` char(64) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`ID`),
  KEY `time_zone` (`time`,`zone`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

看起来像这样:

ID  TIME        ZONE
-----------------------------
3   00:07:36    Pacific/Apia
1   10:01:50    Europe/London
2   12:07:20    Asia/Thimbu
4   00:01:50    US/Hawaii

该表显示了不同国家/地区的不同时间,我需要知道现在正在发生哪些时间。

如何退回时间 的所有ID

示例结果:

如果当前 UTC 时间 10:01:50 ,我想返回以下行:

ID  TIME        ZONE
-----------------------------
1   10:01:50    Europe/London
4   00:01:50    US/Hawaii

伦敦是UTC + 0,夏威夷是UTC -10,所以现在都发生了。


我知道MySQL内置了所有时区信息,但我不知道如何查询它。

1 个答案:

答案 0 :(得分:1)

SELECT CONVERT_TZ(CONCAT(CURDATE(),' ',time),zone,'GMT') FROM config;
+---------------------------------------------------+
| CONVERT_TZ(CONCAT(CURDATE(),' ',time),zone,'GMT') |
+---------------------------------------------------+
| 2013-10-31 10:01:50                               |
| 2013-10-31 11:07:36                               |
| 2013-10-31 10:01:50                               |
| 2013-10-31 06:07:20                               |
+---------------------------------------------------+

请注意,这会假设日期行在日期和(在特定时间)时间方面都是不正确的。