You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:14:26