我面临将EWS约会的开始DateTime
从当地时间转换为UTC的问题。从EWS,我得到了约会DateTime
和TimeZone
。我一直在使用.ToUniversalTime()
将DateTime
转换为UTC。
但是,当当前时间和约会的开始时间在夏令时的不同侧(例如,开始DateTime
可能是2018年3月15日)时,{{1}转换使用当前 UTC偏移量,这会导致DateTime关闭一小时。
我需要一些方法来获取未来日期的UTC偏移量。
我最好的计划是使用.ToUniversalTime()
来获得正确的UTC开始.ToUniversalTime()
的近似值。大多数情况下,这将是正确的UTC转换,如果不是,它就会接近。从理论上讲,我应该能够在此估计的UTC时间内获得预测的UTC偏移量,并将原始的起始日期时间重新转换为UTC。
我知道如果在夏令时切换后一小时内发生DateTime
,这将会失败,但这对我来说足够接近了。我将不胜感激任何建议或替代方法,但我真正想要的是在某个未来日期获得估计的UTC偏移的某种方式。
答案 0 :(得分:3)
一些事情:
DateTime.ToUniversalTime()
只能从系统的本地时区转换。它对您约会中的时区一无所知。
您使用当前的UTC偏移量是不正确的。它使用在提供的时间生效的偏移量。同样,它只知道系统本地时区的偏移量。
请考虑使用.ToUniversalTime()
对象及其TimeZoneInfo
方法,而不是ConvertTimeToUtc
。由于您已经拥有EWS的时区,这可能是最简单的路线。
唯一的估算"涉及的是,您正在估计未来不会发生变化的时区规则。这可能会或可能不会成为。既然我们看不到未来,我们就不可能知道。您的代码本身不需要做任何估计 - 框架提供的功能足够精确,只要它们有可用的数据。
StackOverflow上已有关于此主题的 ton 信息。请在询问前搜索。感谢。
答案 1 :(得分:-1)
PLease使用这种方法可以解决您的问题
//Replace Your TimeZOne info
TimeZoneInfo infotime = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time (Mexico)");
//Replace your date value here
DateTime dt = new DateTime();
DateTime userTime = TimeZoneInfo.ConvertTimeFromUtc(dt, infotime).ToUniversalTime();
答案 2 :(得分:-1)
请保留GMT中的所有日期,这些日期不会成为DST惯例的受害者,并转换为用户本地TZ以供展示或根据需要...
E.g。保持您的系统在GMT,所以UTC === localtime。