2015-01-21 68 views
0

我使用OAuth 2.0 Dot Net Google客户端库(https://developers.google.com/api-client-library/dotnet/apis/tasks/v1)从我的Gmail帐户检索了任务。当我使用Microsoft.Exchange.WebServices Dot Net库将任何这些任务保存到我的交换账户时,虽​​然Gmail账户和交易账户的时区相同,即中央时间(美国&加拿大),但任务的日期会自动调整。我想在任务日期防止这种自动调整。Google任务迁移到Exchange帐户

任何人都可以帮忙吗?

回答

0

我已经通过使用日历时区解决了该问题。基本上,Google日历有时区信息。我从小学日历检索时区信息,然后保存任务到Exchange帐户之前,我转换的截止日期为UTC与下面的C#代码

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后,通过下面的代码

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

这不明类型的日期时间,然后再转换为UTC与下面的代码

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

的帮助现在这个“dueDateUTC”创造了一个未指定类型的DateTime对象对象用于将任务信息保存到Exchange帐户中。在保存任务时,Exchange服务器会自动将dueDateUTC转换为邮箱时区,并且这是需要的。 :)

0

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

+0

杰森,我正在为任何时区的任何交换邮箱写一个通用的应用程序。所以我不知道之前的时区。 – 2015-01-22 10:45:09

+0

这仍然是一个考虑因素。您必须查看Google导出的值。他们是在UTC还是在某个时区?托管API默认为运行时所在计算机的本地时区,并且您设置的所有时间值都会翻译,就好像它们位于该时区中一样。 – 2015-01-22 14:18:36

相关问题