为什么在时区更改时UTC偏移量相同?
下面是我使用的代码:为什么在时区更改时UTC偏移量相同?
TimeZone zone = TimeZone.CurrentTimeZone;
TimeSpan offset = zone.GetUtcOffset(DateTime.Now);
我的时区是+3和偏移量是initally 3个小时,这是罚款。但是,当我通过Windows 7控制面板将时区更改为+6时,偏移量仍然为3.我不明白为什么。
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()
方法(TNX tesicg,我原来建议如下删除代码)。
您的服务器是否会跨时区移动?如果不是那么不要担心关于它...
我也注意到相同的代码在普通的控制台应用程序中工作正常。但是,不在我的ASP.NET应用程序中。 – tesicg 2015-02-10 06:43:15
@tesicg它仅适用于**如果您重新运行您的控制台应用程序。如果你阅读它,等待一个按键,改变设置,按下一个键并重新阅读,那么你显然会得到相同的值(因为它现在存储在一个静态字段中,只有在你第一次阅读它时才初始化)。 ASP.NET将不会重新读取,直到进程将重新启动(或者当IIS决定在另一个进程中为请求提供服务时)。 – 2015-02-10 08:15:31
你说得对。与此同时,我发现这也适用: TimeZoneInfo.ClearCachedData(); TimeZoneInfo local = TimeZoneInfo.Local; TimeSpan offset = local.GetUtcOffset(DateTime.Now); – tesicg 2015-02-10 09:23:00
你是否正在更改服务器上的时区?时区更改是否生效? – shahkalpesh 2015-02-09 13:42:24
IIS位于我的语言环境机器上。 – tesicg 2015-02-09 13:48:56