Convert a future local DateTime into UTC
我面临一个问题,将EWS约会的开始时间从当地时间转换为UTC。从EWS,我得到预约的是
但是,当当前时间和约会的开始时间位于夏令时的不同侧(例如,开始
我需要某种方法来获得未来日期的UTC偏移量。
我的最佳计划是使用
我知道,如果在夏令时转换后一小时内启动
几件事:
DateTime.ToUniversalTime() 只能从系统的本地时区转换。它不知道你预约的时区。使用当前的UTC偏移量是不正确的。它使用在提供的时间生效的偏移量。同样,它只知道系统本地时区的偏移量。
- 请注意,如果您在非常旧的操作系统(Windows XP)上运行,它将只知道当前规则(对于更改了规则的时区)。但这一切都是在现代窗户中正确处理的。
考虑使用
TimeZoneInfo 对象及其ConvertTimeToUtc 方法来代替.ToUniversalTime() 对象。由于您已经有了EWS的时区,所以这可能是最简单的路线。唯一涉及的"估计"是,您正在估计的时区规则在将来不会改变。可能会,也可能不会。因为我们看不到未来,所以我们不可能知道。您的代码本身不需要做任何估计——框架提供的函数足够精确,考虑到它们可用的数据。
StackOverflow上已经有很多关于这个主题的信息了。询问前请先搜索。谢谢。
只需将所有日期保持在格林尼治标准时间内,而不是成为DST公约的牺牲品,并将其转换为用户本地TZ以供显示或根据需要…
例如,保持您的系统在格林尼治标准时间,所以UTC==localtime。
请使用这种方法,这可以解决您的问题
1 2 3 4 5 6 7 | //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(); |