如果日期在MySql中的夏时制中检测

问题描述 投票:1回答:4

我继承了一个旧应用程序,其中所有日期和时间都存储在本地时区(UK)中。我无权更改这些存储方式。

但是,要求是在应用内以格林尼治标准时间显示所有日期。因此,当我从数据库中检索事件列表时,我需要它以这种时间格式显示所有事件,同时观察每个特定事件日期的夏令时是否正在运行。使用以下逻辑,我可以确定查询中的夏令时是否处于活动状态:

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中?

任何帮助,不胜感激。

mysql timezone dst convert-tz
4个回答
1
投票

时区未存储在DATETIME值中。有趣的是,它们用于TIMESTAMP。

鉴于已存储的日期,您可以根据本地规则来确定当时DST是否处于“开启”状态。由于您无法更改日期,因此我想您无法添加一列来存储时区...

创建一个包含规则的存储过程,并将给定日期转换为GMT。

请注意,只有格林威治附近的人希望在格林尼治标准时间显示他们的时间。 :)

祝你好运。>>


0
投票

您在英国。因此,您的TZ应该是CET或CEST(中欧夏季时间)。您可以通过以下方式获取信息:


0
投票

发现了一个丑陋的复杂方式,@ DT输入了日期和时间


0
投票
 SELECT IF(ROUND(TIME_TO_SEC(SUBTIME(TIME(SYSDATE()), UTC_TIME())) / 3600, 0) = 2
    , 'summer time', 'winter time') AS time;
© www.soinside.com 2019 - 2024. All rights reserved.