我有这个表:
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内置了所有时区信息,但我不知道如何查询它。
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 |
+---------------------------------------------------+
请注意,这会对日期变更线做出的假设在日期和(一年中的特定时间)时间方面都是不正确的。