CONVERT_TZ在冬季/夏季时间更换时间内无法正常工作

时间:2016-03-10 16:20:19

标签: mysql timezone

在巴黎(时区欧洲/巴黎)2016-03-27凌晨2:00时区偏移。时区在UTC + 1之前,在UTC + 2之后。

如果您在更改期间给出时间,则Mysql函数CONVERT_TZ不起作用:2016-03-27 02:00:01和2016-03-27 02:59:59之间

示例:

SELECT CONVERT_TZ(' 2016-03-27 02:18:29',' Europe / Paris'," UTC")===&#39 ; 2016-03-27 01:00:00'

很有趣: SELECT CONVERT_TZ(' 2016-03-27 01:00:00',' UTC',"欧洲/巴黎")===' 2016- 03-27 03:00:00'

我必须将一个带有许多时区日期的mysql数据库转换为一个新的数据库,所有日期都直接在UTC时区(安全),这个问题有些日期是错误的:(

1 个答案:

答案 0 :(得分:0)

鉴于本地时间“无效”,MySQL的operator new函数会在转换之前将其提前到下一个有效的本地时间。由于您的CONVERT_TZ值在该时区的该日期确实没有发生,因此当前时间会提前2:18:29,然后正确转换为3:00:00 UTC。

秋季,当DST于2016年10月30日在巴黎结束时,1:00:00将发生两次。你会发现MySQL的2:18:29函数选择了两次出现的 second

此行为是一致的,因此说它不起作用是不正确的。它有效,它可能不是更喜欢的行为。

就个人而言,我认为在春季最好跳到CONVERT_TZ(转换为3:18:39 UTC)。我还认为在秋季最好使用两次出现的 first 。我认为这种行为适应了大量的现实场景,但这只是我的观点。

此外,为什么您的数据开始时间无效?如果它们是从真实事件中记录的,则时间将被跳过,因此不会在数据库中结束。通常,在处理计算时间时,只需处理此问题,例如定期计划。

关于你的第二个例子,那里没有错。当时区偏移为UTC + 2时,巴黎的1:00 UTC确实是3:00。