我想确定日期是否在夏令时中。这用于确定两个日期之间的小时数,因为这将影响成本 - 它用于护理雇用。我试图尽可能地删除代码。我正在努力学习语法(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
答案 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