mysql夏令时 - 确定是真还是假

时间:2012-12-14 13:43:18

标签: mysql datetime select

我想确定日期是否在夏令时中。这用于确定两个日期之间的小时数,因为这将影响成本 - 它用于护理雇用。我试图尽可能地删除代码。我正在努力学习语法(is_daylight函数不存在),但希望能够传达我想要做的事情。任何帮助非常感谢。

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 

1 个答案:

答案 0 :(得分: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