我使用OAuth 2.0 Dot Net Google客户端库(https://developers.google.com/api-client-library/dotnet/apis/tasks/v1)从我的Gmail帐户中检索了任务。当我使用Microsoft.Exchange.WebServices Dot Net库将任何这些任务保存到我的交换帐户时,任务的日期会自动调整,尽管Gmail帐户和交换帐户的时区相同,即中央时间(美国和加拿大) 。我想在任务日期中防止这种自动调整。
任何人都可以帮忙吗?
答案 0 :(得分:0)
确保将ExchangeService对象上的时区设置为用户的时区。 https://msdn.microsoft.com/EN-US/library/office/dn789029(v=exchg.150).aspx
答案 1 :(得分: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);
然后,借助以下代码
,将此未指定的种类日期时间再次转换为UTCdueDateUTC = TimeZoneInfo.ConvertTime(unspecifiedKindDate, Utility.OlsonTimeZoneToTimeZoneInfo(timezone), TimeZoneInfo.Utc);
现在,这个“dueDateUTC”对象用于将任务信息保存到Exchange帐户。在保存任务时,Exchange服务器会自动将dueDateUTC转换为邮箱时区,这是所希望的。 :)