0

我有这张桌子:

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时间的所有 s ?

示例结果:

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

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

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


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

4

1 回答 1

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                               |
+---------------------------------------------------+

请注意,这对日期线的假设在日期和(在一年中的特定时间)时间方面都是不正确的。

于 2013-10-31T13:34:02.770 回答