使用Google Calendar API添加重复事件时夏令时(DST)时段时间错乱
问题原因及解决办法
你的问题核心是**dateTime的偏移值与指定时区不匹配**,导致Google Calendar无法正确处理夏令时调整。
具体问题分析
Google Calendar确实会自动处理夏令时的时间调整,但前提是你提供的时间参数要和指定时区一致。你设置了timeZone: "Australia/Sydney",但dateTime用了-05:00的偏移——这和悉尼时区的实际偏移(夏令时+11:00、非夏令时+10:00)完全不符。这种矛盾的参数会让API解析时出现混乱,把原本应该是悉尼当地下午1:30的时间,错误地按UTC-05时区的时间转换,最终导致夏令时期间的实例时间显示异常。
解决办法
修正start和end的dateTime值,确保偏移与Australia/Sydney时区匹配,或者直接使用UTC时间并指定时区:
方案1:使用悉尼当地时间带正确偏移
"start": { "dateTime": "2024-01-30T13:30:00+11:00", "timeZone": "Australia/Sydney" }, "end": { "dateTime": "2024-01-30T14:00:00+11:00", "timeZone": "Australia/Sydney" }, "recurrence": [ "RRULE:FREQ=MONTHLY;UNTIL=20241218T125900Z;INTERVAL=1;BYDAY=-1WE" ]
方案2:使用UTC时间(更稳妥,无需手动计算时区偏移)
"start": { "dateTime": "2024-01-30T02:30:00Z", "timeZone": "Australia/Sydney" }, "end": { "dateTime": "2024-01-30T03:00:00Z", "timeZone": "Australia/Sydney" }, "recurrence": [ "RRULE:FREQ=MONTHLY;UNTIL=20241218T125900Z;INTERVAL=1;BYDAY=-1WE" ]
调整后,Google Calendar会自动根据Australia/Sydney时区的夏令时规则,正确生成所有重复实例的时间。
内容的提问来源于stack exchange,提问作者Jeff McKay
相关产品推荐
相关产品推荐

