[asp.net]为什么 UTC 偏移量是相同当时区改吗?

标签: Asp.net .Net C#
发布时间: 2017/3/26 5:49:50
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

以下是我使用的代码︰

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

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

解决方法 1:

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;
        }
    }
}

以"重置"你必须卸载 AppDomain 或自己处理这一事件并调用 TimeZoneInfo.ClearCachedData() 方法 (感谢 tesicg,我原本的建议是删除下面的代码)。

var 字段 = typeof(TimeZone)。GetField ("curretTimeZone",返回 |返回); 字段。SetValue (null,null); 重置的 '当前时区' 为空它会迫使 '当前时区' 重新创建它时所需。请注意这里我们依靠小的实现细节 (字段名称和行为) 所以你想如果你真的需要它。


将您的服务器跨时区移动吗?如果不然后别担心这件事...

赞助商