我继承了一个遗留应用程序,其中所有日期和时间都存储在本地时区(英国)中。我无法改变这些存储方式。检测日期是否在MySql的夏令时中
但是,要求是在应用程序中显示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中?
任何帮助,非常感谢。
你能不能使用CONVERT_TZ功能在MySQL?或者它没有给你正确的结果? http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_convert -tz – Dave 2010-10-25 10:43:16
我在做。关键是我需要知道是否应用它。由于它存储在本地时间,其中一些是格林威治标准时间+ 1其他格林威治标准时间+0。我不能不加选择地将它应用于所有人。因此,我需要知道日期是否为+1 – 2010-10-25 11:13:14
我的印象是,CONVERT_TZ基于time_zone_blah表的内容自动奇迹地考虑了夏令时,所以如果这些内容设置正确,您应该能够简单地做'CONVERT_TZ(event_time,“美国/东部”,“GMT”)'并让它在格林威治标准时间给出正确的时间 – Dave 2010-10-25 12:01:58