为什么我在应用程序中的当前时区没有改变?
Why my current time zone in app is not changing?
我是 c#
和 timezone
的新手。
我目前正在创建一个带有 timezone
.
的应用
我有这个代码来获取我本地机器的当前 timezone
。
private void btnGetCurrentTimeZone_Click(object sender, EventArgs e)
{
TimeZone localZone = TimeZone.CurrentTimeZone;
lblShowTimeZone.Text = "TimeZone: " + localZone.StandardName;
}
我的问题是,当我 运行 应用程序并第一次单击 button
时,我得到了正确的 timezone
。但是当我在设置中更改系统 timezone
并再次单击 button
时,timezone
值没有改变。我需要关闭应用程序并再次 运行 以获得正确的 timezone
.
使用 TimeZoneInfo 代替 TimeZone;时区已弃用 reference documentation.
TimeZoneInfo localZone = TimeZoneInfo.Local;
TimeZoneInfo.ClearCachedData();
lblShowTimeZone.Text = "TimeZone: " + localZone.StandardName;
为了效率,不用每次调用TimeZoneInfo.Local
时都调用TimeZoneInfo.ClearCachedData()
,您可以设置一个事件处理程序在系统时区更改时执行此操作:
// in some startup init method for your application
SystemEvents.TimeChanged += (s, e) => TimeZoneInfo.ClearCacheData();
现在这只会被清除 when/if 用户更改了系统时区,您可以在整个应用程序中使用 TimeZoneInfo.Local
并确信它反映了当前系统时区,您会从中受益大部分时间都缓存该值,因此不需要调用某些 Win32 方法来每次获取当前值。
我是 c#
和 timezone
的新手。
我目前正在创建一个带有 timezone
.
我有这个代码来获取我本地机器的当前 timezone
。
private void btnGetCurrentTimeZone_Click(object sender, EventArgs e)
{
TimeZone localZone = TimeZone.CurrentTimeZone;
lblShowTimeZone.Text = "TimeZone: " + localZone.StandardName;
}
我的问题是,当我 运行 应用程序并第一次单击 button
时,我得到了正确的 timezone
。但是当我在设置中更改系统 timezone
并再次单击 button
时,timezone
值没有改变。我需要关闭应用程序并再次 运行 以获得正确的 timezone
.
使用 TimeZoneInfo 代替 TimeZone;时区已弃用 reference documentation.
TimeZoneInfo localZone = TimeZoneInfo.Local;
TimeZoneInfo.ClearCachedData();
lblShowTimeZone.Text = "TimeZone: " + localZone.StandardName;
为了效率,不用每次调用TimeZoneInfo.Local
时都调用TimeZoneInfo.ClearCachedData()
,您可以设置一个事件处理程序在系统时区更改时执行此操作:
// in some startup init method for your application
SystemEvents.TimeChanged += (s, e) => TimeZoneInfo.ClearCacheData();
现在这只会被清除 when/if 用户更改了系统时区,您可以在整个应用程序中使用 TimeZoneInfo.Local
并确信它反映了当前系统时区,您会从中受益大部分时间都缓存该值,因此不需要调用某些 Win32 方法来每次获取当前值。