【发布时间】:2011-04-30 03:25:21
【问题描述】:
我继承了一个遗留应用程序,其中所有日期和时间都存储在本地时区(英国)中。我无法更改它们的存储方式。
但是,要求是在应用程序中以 GMT 显示所有日期。因此,当我从数据库中检索事件列表时,我需要它以这种时间格式显示它们,同时观察每个特定事件日期是否正在运行夏令时。使用以下逻辑,我可以确定查询中是否启用了夏令时:
IF(CAST(TIMEDIFF(NOW(), UTC_TIMESTAMP()) AS SIGNED) >0,
DATE_FORMAT(CONVERT_TZ(ADDTIME(`event_date`, IFNULL(`event_time`, '00:00')), '+01:00', '+00:00'), '%H:%i'), `event_time`) AS event_time
然而,这显然只是检查它正在运行的日期。因此,未来任何跨越夏令时界限的事件都不起作用。
有没有一种方法可以检测给定日期是否在 mysql 查询本身的 DST 中?
任何帮助,非常感谢。
【问题讨论】:
-
不能在mysql中使用CONVERT_TZ函数吗?或者它没有给你正确的结果? dev.mysql.com/doc/refman/5.1/en/…
-
我在做。关键是我需要知道是否应用它。由于它存储在本地时间,其中一些是 GMT+1,另一些是 GMT+0。我不能不分青红皂白地将其应用于所有人。因此,我需要知道日期是否为 +1
-
我的印象是 CONVERT_TZ 会根据 time_zone_blah 表的内容自动神奇地考虑夏令时,因此如果设置正确,您应该能够简单地执行
CONVERT_TZ(event_time, "US/Eastern", "GMT")并拥有它给出了格林威治标准时间的正确时间 -
好吧,我没有使用命名时区,因为它们似乎没有在系统上设置。然而,问题肯定是它们一开始并没有存储在特定的时区。这是插入它们时的当地时间。这可能是 GMT +1 或 GMT + 0
标签: mysql time timezone dst convert-tz