2012-12-14 79 views
0

即時消息正在尋找以確定日期是否在夏令時。這用於確定兩個日期之間的小時數,因爲這會影響成本 - 對於小心僱用。我試圖儘可能地去掉代碼。我在語法上苦苦掙扎(is_daylight函數不存在),但希望能夠傳達我正在嘗試做的事情。任何幫助非常感謝。mysql夏令時 - 確定是否爲真

SELECT 

    -- lost an hour on pickup date so add an hour to the date 
    WHEN 
    is_daylight(pickup_date)=1 AND is_daylight(dropoff_date)=0 
    THEN 
    unix_timestamp(dropoff_date) - unix_timestamp(pickup_date)+3600/86400 as num_hours 

    -- not date time 
    ELSE 
    unix_timestamp(dropoff_date) - unix_timestamp(pickup_date)/86400 as num_hours 

回答

2

manual狀態:

UNIX_TIMESTAMP()假定它的參數是當前時區中的日期時間值。

因此,如果您的服務器配置正確,即使用正確的時區,那麼unix時間戳應該已經包含了可能需要的任何dst修改。因此,首先確保有任何問題需要解決,如果有,請檢查time zone support是否配置正確。

請注意,轉換是有損的,因爲在切換之前,可能會有一個本地時間對應於兩個UTC時間,一個在切換之前和一個之後。出於這個原因,在任何時候存儲unix時間戳可能會更好,並且只能轉換爲用戶輸出的本地時間。

如果您想知道某個日期的DST是否處於活動狀態,則可以使用CONVERT_TZ。從本地時間轉換爲與沒有DST的本地時間相對應的固定偏移時間。如果結果保持不變,則DST無效。如果它改變了一個小時,那麼DST是活躍的。

實施例:

SELECT CASE 
WHEN   '2013-07-24 15:00' = 
     CONVERT_TZ('2013-07-24 15:00', 'EST', 'America/New_York') 
THEN 'no DST' ELSE 'DST' END AS isDST