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



我有这个表:

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

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

相关内容

  • 没有找到相关文章

最新更新