Google Calendar API通过.Net/C#创建事件出现5小时时间偏差问题
问题原因
该问题是Google Calendar API的时区处理逻辑导致的:当你传入EventDateTime对象时如果没有显式指定时区属性,API会默认将传入的时间视为UTC时间。你遇到的5小时偏差对应UTC与北美东部标准时间(UTC-5)的差值:你传入的本地12:00PM被API识别为UTC 12:00PM,日历展示时转换为你本地时区就会显示为7:00AM,和你遇到的现象完全吻合。
摘要里的时间显示正确是因为摘要内容是你直接用本地时间生成的静态文本,Google Calendar不会解析修改这段文本,只会原样展示。
解决方案
有两种可行的修复方式,二选一即可:
方案1:显式指定时区
给EventDateTime对象添加TimeZone属性,取值为你本地对应的IANA时区ID即可:
Event newEvent = new Event() { Summary = (@event.bandName + " " + @event.eventStart.ToShortTimeString() + "-" + @event.eventEnd.ToShortTimeString() + " $" + @event.ticketPrice).ToUpper(), Description = bandLink + " " + @event.description, Start = new EventDateTime() { DateTime = @event.eventStart, TimeZone = "America/New_York" // 替换为你实际使用的时区IANA ID,国内用户可填"Asia/Shanghai" }, End = new EventDateTime() { DateTime = @event.eventEnd, TimeZone = "America/New_York" // 与开始时间时区保持一致 }, };
方案2:传入UTC时间
将本地时间转换为UTC时间后再传给API,无需额外指定时区:
Event newEvent = new Event() { Summary = (@event.bandName + " " + @event.eventStart.ToShortTimeString() + "-" + @event.eventEnd.ToShortTimeString() + " $" + @event.ticketPrice).ToUpper(), Description = bandLink + " " + @event.description, Start = new EventDateTime() { DateTime = @event.eventStart.ToUniversalTime() }, End = new EventDateTime() { DateTime = @event.eventEnd.ToUniversalTime() }, };
之前的尝试未生效的原因
你仅给DateTime对象指定了DateTimeKind.Local属性,但Google Calendar的.NET客户端库不会主动将该标识对应的时区信息传递给API接口,API仍会默认将传入时间当作UTC处理,因此问题没有得到修复。
内容的提问来源于stack exchange,提问作者Derek S
相关产品推荐
相关产品推荐

