我正试图在Windows Embedded 7上运行的应用程序和UTC时间之间找到区别。为此,我有以下代码:
TimeZoneInfo utcTimeZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
DateTime localTime = DateTime.Now;
DateTime utcTime = TimeZoneInfo.ConvertTime(localTime, TimeZoneInfo.Local, utcTimeZone);
TimeSpan utcOffset = localTime - utcTime;
这在我自己的开发PC上正常运行,运行Windows 7.但是,当我在运行Windows Embedded 7的设备上安装我的应用程序时,无论我将其设置为什么时区,当我运行我的应用程序时,
TimeZoneInfo.Local.BaseUtcOffset
的值始终为00:00。 BaseUtcOffset
返回的对象中的TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time")
值也是00:00(虽然这是预期的)。ConvertTime()
函数始终返回当前时间少于一小时。 (由于TimeZoneInfo.Local.SupportsDaylightSavingsTime
值始终为假,所以并不感到惊讶。)我应该使用TimeZoneInfo.Local
的其他方式来获取UTC与当前时区之间的偏移量吗?我需要在此包括夏令时。
答案 0 :(得分:0)
一些事情:
ID为"GMT Standard Time"
的时区不是UTC - 它是英国时间。它的显示名称与“都柏林,爱丁堡,里斯本,伦敦”相匹配。它在冬天使用UTC + 0,夏天使用UTC + 1作为夏令时。
UTC时区ID只是"UTC"
- 虽然您很少需要它。
如果TimeZoneInfo.Local.BaseUtcOffset
为零,则表示计算机的时区设置为UTC + 0作为其标准偏移量。目前在Windows中定义了四种。此属性不反映夏令时。
确认偏移量将根据您运行代码的一年中的哪个时间而变化。时区与时区偏移量不同。
既然你说上面的代码是零,我猜你的当地时区要么是前面提到的英国时间,要么就是摩洛哥的卡萨布兰卡。这是因为您从当前也是UTC + 1的另一个时区减去UTC + 1本地时间。 1 - 1 = 0
执行此操作的正确方法根本不涉及减法。只需使用GetUtcOffset
方法:
TimeSpan offset = TimeZoneInfo.Local.GetUtcOffset(DateTime.Now);
再次注意,这会返回当前偏移量。在一年中的不同时间运行它,或者通过传递不同的值而不是DateTime.Now
可能会返回不同的结果。