Google 迁移到 Exchange 帐户的任务

Google Tasks Migration to Exchange account

我已使用 OAuth 2.0 Dot Net Google 客户端库 (https://developers.google.com/api-client-library/dotnet/apis/tasks/v1) 从我的 Gmail 帐户中检索任务。当我使用 Microsoft.Exchange.WebServices Dot Net 库将这些任务中的任何一个保存到我的交换帐户时,任务的日期会自动调整,尽管 Gmail 帐户和交换帐户的时区相同,即中部时间(美国和加拿大)。我想阻止任务日期中的这种自动调整。

有人能帮忙吗?

确保将 ExchangeService 对象上的时区设置为用户的时区。 https://msdn.microsoft.com/EN-US/library/office/dn789029(v=exchg.150).aspx

我已经通过使用日历时区解决了这个问题。基本上,Google Calendar 有时区信息。我从主日历中检索了时区信息,然后在将任务保存到 Exchange 帐户之前,我使用以下 C# 代码将截止日期转换为 UTC

if (task.Due.Value.Kind == DateTimeKind.Local)
                        {
                            dueDateUTC = task.Due.Value.ToUniversalTime();
                            unspecifiedKindDate = new DateTime(dueDateUTC.Year, dueDateUTC.Month, dueDateUTC.Day);
                            dueDateUTC = TimeZoneInfo.ConvertTime(unspecifiedKindDate, Utility.OlsonTimeZoneToTimeZoneInfo(timezone), TimeZoneInfo.Utc);
                        }

这段代码首先判断任务截止日期是否在本地时区。如果它在本地时区,则到期日期将转换为 UTC。转换为UTC后,通过以下代码创建一个未指定种类的datetime对象

unspecifiedKindDate = new DateTime(dueDateUTC.Year, dueDateUTC.Month, dueDateUTC.Day);

然后在以下代码的帮助下再次将此未指定类型的日期时间转换为 UTC

dueDateUTC = TimeZoneInfo.ConvertTime(unspecifiedKindDate, Utility.OlsonTimeZoneToTimeZoneInfo(timezone), TimeZoneInfo.Utc);

现在这个 "dueDateUTC" 对象用于将任务信息保存到 Exchange 帐户中。在保存任务时,Exchange 服务器自动将 dueDateUTC 转换为邮箱时区,这是需要的。 :)