为什么我在应用程序中的当前时区没有改变?

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 方法来每次获取当前值。