TimeZoneInfo.GetUtcoffset有多可靠?

问题描述 投票:2回答:1

我正在使用GetUtcoffset()对象中的函数TimeZoneInfo来获取特定日期时间的Utc偏移值。通常,夏令时将遵循特定的规则,例如“ 从十月的第一个星期日开始,到四月的第一个星期日结束”(AUS东部标准时间),因此我相信函数产生的结果。

但是我确实想知道,如果夏令时由于政府的决定而延迟或改变,结果将会怎样?过去,有几次澳大利亚政府违反了某些事件的夏令时规则。在这些情况下,调用GetUtcoffset()会产生不正确的结果,还是库足够聪明以至“偶尔”从Internet上的某些来源获取夏令时更新?

用法:我正在设计一个停车管理系统。一个数据库在时区不同的多个客户端之间共享。停车事件的时间可以作为法庭上的证据,因此,正确安排停车时间非常重要。当系统收到车辆停放的通知时,系统将生成到达时间。鉴于该通知可能来自不同时区的远程站点,我想知道我是否可以可靠地使用时区在客户端站点上锻炼当前日期时间。

示例:

string clientTimeZoneId = "AUS Eastern Standard Time";
var utcTime = DateTime.UtcNow;
var clientTimeZone = TimeZoneInfo.FindSystemTimeZoneById(clientTimeZoneId);
var arrivalTime = utcTime.Add(clientTimeZone.GetUtcOffset(utcTime));

这是GetUtcOffset功能变得很重要的地方。鉴于在2019-2020年“ AUS东部标准时间”的夏令时于2020年4月5日结束,因此在6日调用GetUtcOffset将提供+10:00:00。但是,如果出于任何原因(例如奥运会的事件),DST扩展到第十,则根据arrivalTime的值,GetUtcOffset可能不正确一个小时。

目前,我们的系统管理员必须每年手动更新数据库中的夏令时,但是不必这么做。我不确切知道政府在这些事件中做了什么,但是他们必须将更新发送到某个地方,否则受影响时区中的所有计算机的时间都不正确。因此,回到我最初的问题,TimeZoneInfo是否将从任何“ DST源”中获取数据?

c# timezone dst
1个回答
2
投票

您的问题分为两个部分。我将从您首先给出的代码示例开始:

var arrivalTime = utcTime.Add(clientTimeZone.GetUtcOffset(utcTime));
© www.soinside.com 2019 - 2024. All rights reserved.