为什么时区更改时UTC偏移量相同?

时间:2015-02-09 13:40:06

标签: c# asp.net .net

这是我使用的代码:

TimeZone zone = TimeZone.CurrentTimeZone;
TimeSpan offset = zone.GetUtcOffset(DateTime.Now);

我的时区为+3,偏移量最初为3小时,很好。但是,当我通过Windows 7控制面板将时区更改为+6时,偏移量仍为3.我不明白为什么。

1 个答案:

答案 0 :(得分:2)

TimeZone.CurrentTimeZone读取延迟初始化的静态字段,在首次访问时分配,如果更改系统设置,则不会销毁/重新创建。从反汇编的源代码:

public static TimeZone CurrentTimeZone {
    get {
        if (currentTimeZone != null)
            return currentTimeZone;

        lock (InternalSyncObject) {
            if (TimeZone.currentTimeZone == null)
                TimeZone.currentTimeZone = new CurrentSystemTimeZone();

            return TimeZone.currentTimeZone;
        }
    }
}

To" reset"它你必须自己卸载AppDomain或处理该事件并调用TimeZoneInfo.ClearCachedData()方法(tnx tesicg,我原来的建议是下面的删除代码)。

<德尔>     var field = typeof(TimeZone).GetField(&#34; curretTimeZone&#34;,         BindingFlags.NonPublic | BindingFlags.Static);     field.SetValue(null,null); 将`currentTimeZone`重置为null它会强制`CurrentTimeZone`在需要时重新创建它。请注意,我们依赖于一个小的实现细节(字段名称和行为),因此您必须考虑是否真的需要它。


您的服务器会跨时区移动吗?如果没有,那么不要担心 ...