【发布时间】:2022-01-25 16:37:03
【问题描述】:
我是 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。
【问题讨论】:
-
您需要向我们展示评估任何问题所需的所有代码。您正在谈论“单击按钮”,因此使用完整的单击处理程序会很好。我们所拥有的只是一条脱离上下文的单行......
-
似乎
TimeZone.CurrentTimeZone在您第一次获得本地时区时使用了一个支持字段来缓存它。我似乎找不到改变这一点的方法,但如果你使用TimeZoneInfo,你可以通过调用TimeZoneInfo.ClearCachedData()来清除它的缓存,之后TimeZoneInfo.Local应该总是有正确的时区。 -
感谢@Jesse 成功了。谢谢你的主意。我刚刚使用
TimeZoneInfo并使用TimeZoneInfo.ClearCachedData()清除缓存。我所做的是用这 3 行代码TimeZoneInfo.ClearCachedData(); TimeZoneInfo timeZone = TimeZoneInfo.Local; lblShowTimeZone.Text = "TimeZone: " + timeZone.DisplayName;更改了以前的代码 -
.NET 框架非常棒。它对日期、时间和时区的处理是......你可能想看看 NodaTime (nodatime.org)