在巴黎(时区欧洲/巴黎)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时区(安全),这个问题有些日期是错误的:(
答案 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。