2012-12-14 2 views
0

메신저는 일광 절약 시간제를 찾고 있습니다. 이것은 두 날짜 사이의 시간 수를 결정하는 데 사용되므로 비용에 영향을 미칩니다. 즉, 관리 고용에 대한 것입니다. 가능한 한 코드를 제거하려고했습니다. 구문에 약간의 어려움이 있습니다. (is_daylight 함수는 존재하지 않습니다.)하지만 잘하면 im이 무엇을하려고하는지 알려주고 있습니다. 어떤 도움을 많이 주셨습니다.mysql 일광 절약 시간 - true 또는 false를 결정합니다.

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()는 인수가 현재 시간대의 날짜 값이 있다고 가정합니다.

서버가 올바르게 구성된 경우, 즉 정확한 시간대를 사용하는 경우 유닉스 타임 스탬프에 이미 필요한 dst 수정 사항이 통합되어 있어야합니다. 먼저 수정해야 할 부분이 있는지 확인하고,있는 경우 time zone support이 올바르게 구성되었는지 확인하십시오.

변환이 손실되면 전환 직전에 스위치 오버 전후에 두 UTC 시간에 해당하는 현지 시간이있을 수 있습니다. 이러한 이유로 유닉스 타임 스탬프를 항상 저장하고 사용자 출력을 위해 현지 시간으로 변환하는 것이 더 낫다.

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