【问题标题】:Using C#, how to clear a running application Cache to adopt timezone change?使用 C#,如何清除正在运行的应用程序缓存以采用时区更改?
【发布时间】:2026-02-13 00:40:01
【问题描述】:

说明

我有 2 个正在运行的应用程序:

  1. 我创建的基于 C# 的应用程序用于检查时间或时区是否已更改并与设备同步时间。 (APP1)
  2. 一个外部/第三方应用程序,它监视时间以进行数据处理,并在设定的时间执行必要的任务。(APP2

还有另一个应用程序可以从主时钟检查时区数据并按固定时间表执行。每当主时钟发送时区更新命令时,此应用都会更新时区。

我已将 APP1 配置为清除它自己的缓存,以便获得正确的时间(如here by GregK 所要求的那样)。 APP1 工作正常。

问题

因此,当时区发生变化时,APP2会延迟执行它的计划任务,因为它的时间不正确。

问题

有没有办法清除 APP2 的缓存或强制它采用时区更改而不重新启动它?

【问题讨论】:

  • 为什么不使用 UTC,并将其转换为每个设备的本地时间?例如您有 UTC 时间,然后在设备上添加/减去当前时区的差异。
  • 我有 APP1 正在运行并获得正确的时间。我做了一个解决方法来消除 APP1 上的这个问题。我创建了工具(应用程序),执行时会将当前时间写入文本文件。这样,无论时区是否已更改,我都可以获得正确的时间。并且因为每次APP1请求当前时间都会执行,所以时区缓存不会在应用中持久化。
  • 很遗憾,我不是APP2的开发者。这就是为什么我不能对它做任何修改。
  • 那你打算怎么清除APP2的缓存,或者强制呢?当您无法对其进行任何修改时。
  • 不,这是由该应用程序的开发人员完成的。您将需要重新启动该应用程序,以便它加载新的正确数据,或者联系该应用程序的开发人员。

标签: c# date datetime timezone


【解决方案1】:

这是我制定的解决方案。

APP1 将处理时间变化。它将存储服务器所在的当前时区。然后当时区更改时,它将时间存储到变量中,然后恢复上次使用的时区并使用存储在变量中的新时间更新当前时间。这样,即使时区不会改变,服务器也可以随着时间的变化而采用。

Here's how 获取时区更改后的正确时间。

protected override void OnClosed ( EventArgs e )
{
   base.OnClosed(e);
   SystemEvents.TimeChanged -= SystemEvents_TimeChanged;
}

protected override void OnLoad ( EventArgs e )
{
   base.OnLoad(e);
   SystemEvents.TimeChanged += SystemEvents_TimeChanged;
}

void SystemEvents_TimeChanged ( object sender, EventArgs e )
{
   TimeZoneInfo.ClearCachedData();
}

private void timer1_Tick ( object sender, EventArgs e )
{
   label1.Text = DateTime.Now.ToString();
}

getting the current timezone 的另一个参考。

TimeZone localZone = TimeZone.CurrentTimeZone;
Console.WriteLine(localZone.StandardName);

这样,您无需重新启动应用程序。干杯!

【讨论】: