我繼承了一個遺留應用程序,其中所有日期和時間都存儲在本地時區(英國)中。我無法改變這些存儲方式。檢測日期是否在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