为什么更改时区时 UTC 偏移量相同?
Why UTC offset is the same when time zone was changed?
这是我使用的代码:
TimeZone zone = TimeZone.CurrentTimeZone;
TimeSpan offset = zone.GetUtcOffset(DateTime.Now);
我的时区是+3,时差最初是3小时,没问题。但是,当我通过 Windows 7 控制面板将时区更改为 +6 时,偏移量仍然是 3。我不明白为什么。
TimeZone.CurrentTimeZone
读取一个延迟初始化的静态字段,它在第一次访问时 分配一次 并且如果您更改系统设置它将不会 destroyed/recreated 。来自反汇编的源代码:
public static TimeZone CurrentTimeZone {
get {
if (currentTimeZone != null)
return currentTimeZone;
lock (InternalSyncObject) {
if (TimeZone.currentTimeZone == null)
TimeZone.currentTimeZone = new CurrentSystemTimeZone();
return TimeZone.currentTimeZone;
}
}
}
要"reset"它你必须卸载AppDomain或自己处理那个事件并调用TimeZoneInfo.ClearCachedData()
方法(tnx tesicg,我原来的建议被删除下面的代码)。
var field = typeof(TimeZone).GetField("curretTimeZone",
BindingFlags.NonPublic | BindingFlags.Static);
field.SetValue(null, null);
将 `currentTimeZone` 重置为 null 会强制 `CurrentTimeZone` 在需要时重新创建它。请注意这里我们依赖于一个小的实现细节(字段名称和行为)所以你必须考虑你是否真的需要它。
你们的服务器会跨时区移动吗?如果没有,那么 不用担心...
这是我使用的代码:
TimeZone zone = TimeZone.CurrentTimeZone;
TimeSpan offset = zone.GetUtcOffset(DateTime.Now);
我的时区是+3,时差最初是3小时,没问题。但是,当我通过 Windows 7 控制面板将时区更改为 +6 时,偏移量仍然是 3。我不明白为什么。
TimeZone.CurrentTimeZone
读取一个延迟初始化的静态字段,它在第一次访问时 分配一次 并且如果您更改系统设置它将不会 destroyed/recreated 。来自反汇编的源代码:
public static TimeZone CurrentTimeZone {
get {
if (currentTimeZone != null)
return currentTimeZone;
lock (InternalSyncObject) {
if (TimeZone.currentTimeZone == null)
TimeZone.currentTimeZone = new CurrentSystemTimeZone();
return TimeZone.currentTimeZone;
}
}
}
要"reset"它你必须卸载AppDomain或自己处理那个事件并调用TimeZoneInfo.ClearCachedData()
方法(tnx tesicg,我原来的建议被删除下面的代码)。
你们的服务器会跨时区移动吗?如果没有,那么 不用担心...