Google Calendar API夏令时问题:事件时间被偏移1小时
解决Google Calendar API夏令时时间偏移问题
嘿,这个夏令时导致的时间偏移坑我之前踩过,太懂这种头疼的感觉了!咱们来拆解一下问题,然后搞定它~
问题根源
你代码里同时给start和end对象设置了带时区偏移的dateTime(比如+1:00)和timeZone参数,这会让Google API产生解析冲突。欧洲/阿姆斯特丹时区在夏令时期间(通常是3月到10月)的偏移是+02:00,冬令时是+01:00,当你同时传递这两个参数时,API可能会错误地叠加或转换时区,导致时间偏移1小时。
两种解决方案
方案1:只指定时区,让API自动处理夏令时
这种方式最省心,不用手动跟踪夏令时的偏移变化。把dateTime设为本地时间(不带时区偏移),只保留timeZone参数:
$event = new Google_Service_Calendar_Event(array( 'summary' => 'title', 'description' => 'description', 'start' => array( 'dateTime' => '2018-04-05T12:00:00', // 不带偏移的本地时间 'timeZone' => 'Europe/Amsterdam', // 让API自动适配夏令时 ), 'end' => array( 'dateTime' => '2018-04-05T13:00:00', 'timeZone' => 'Europe/Amsterdam', ) ));
方案2:使用带正确偏移的dateTime,去掉timeZone参数
如果你必须用带偏移的dateTime,要确保偏移值和目标时区的实际夏令时偏移一致(2018年4月阿姆斯特丹是夏令时,偏移应为+02:00),同时去掉timeZone参数:
$event = new Google_Service_Calendar_Event(array( 'summary' => 'title', 'description' => 'description', 'start' => array( 'dateTime' => '2018-04-05T12:00:00+02:00', // 夏令时正确偏移 ), 'end' => array( 'dateTime' => '2018-04-05T13:00:00+02:00', ) ));
为什么这样有效?
Google Calendar API的设计逻辑是:如果同时提供dateTime(带偏移)和timeZone,它会尝试将dateTime转换为指定时区,但夏令时切换期间时区偏移的变化会干扰这个转换过程,导致时间计算错误。只保留其中一种时区指定方式,API就能准确解析事件时间,避免偏移问题。
内容的提问来源于stack exchange,提问作者Leon N
相关产品推荐
相关产品推荐

