时区更改时在运行时请求新的系统时间
Request New System Time on Runtime when Timezone Changes
我有一个 windows 服务,它在本地系统时区发生变化时监视系统事件,然后执行事件查询新时区和新系统时间。我关注了 [Microsoft documentation][1]
但在时区更改后我无法使用 DateTime.Now.ToLongTimeString()
获取新的系统时间。我该如何解决这个问题?
Debugging TimeZone.CurrentTimeZone
我还发现 TimeZone.CurrentTimezone 不会更新标准时区,而只会在系统上更改时区后更新 DaylightName。
Logs when TimeZone Changes
理想情况下,我不仅希望获得新的系统时间,还希望获得时区标准名称。但是有了新的系统时间和日光名称,我可以实现我的应用程序的其余部分。
查看下面我的代码:
//when service starts
public void Start()
{
//timer stops
_timer.Start();
//Event when services Starts
ServiceStarted();
//Getting access to the System Events, and monitoring for time Zone changes.
SystemEvents.TimeChanged += SystemEvents_TimeChanged;
}
//System Time event when Time Changes
private void SystemEvents_TimeChanged(object sender, EventArgs e)
{
TimeZoneInfo.Local.ToString();
TimeZone.CurrentTimeZone.ToString();
string[] lines = new string[]
{
$"{DateTime.Now.ToString()} The Local System Time has changed",
$"{DateTime.Now.ToString()} Previous Time zone {TimeZoneInfo.Local.DaylightName.ToString()}",
$"{DateTime.Now.ToString()} New Time Zone {TimeZone.CurrentTimeZone.DaylightName.ToString()} and the time is {DateTime.Now.ToLongTimeString()}"
};
//create log file and add the event message
File.AppendAllLines(@"C:\Temp\Heartbeat_Log.txt", lines);
}
.Net 出于性能原因缓存系统本地时区,因此如果您专门监视更改,则需要清除缓存。
在您的事件处理程序中,调用:
TimeZoneInfo.ClearCachedData();
https://docs.microsoft.com/dotnet/api/system.timezoneinfo.clearcacheddata
此外,TimeZone
class 已弃用。仅使用 TimeZoneInfo
.
我有一个 windows 服务,它在本地系统时区发生变化时监视系统事件,然后执行事件查询新时区和新系统时间。我关注了 [Microsoft documentation][1]
但在时区更改后我无法使用 DateTime.Now.ToLongTimeString()
获取新的系统时间。我该如何解决这个问题?
Debugging TimeZone.CurrentTimeZone
我还发现 TimeZone.CurrentTimezone 不会更新标准时区,而只会在系统上更改时区后更新 DaylightName。 Logs when TimeZone Changes
理想情况下,我不仅希望获得新的系统时间,还希望获得时区标准名称。但是有了新的系统时间和日光名称,我可以实现我的应用程序的其余部分。
查看下面我的代码:
//when service starts
public void Start()
{
//timer stops
_timer.Start();
//Event when services Starts
ServiceStarted();
//Getting access to the System Events, and monitoring for time Zone changes.
SystemEvents.TimeChanged += SystemEvents_TimeChanged;
}
//System Time event when Time Changes
private void SystemEvents_TimeChanged(object sender, EventArgs e)
{
TimeZoneInfo.Local.ToString();
TimeZone.CurrentTimeZone.ToString();
string[] lines = new string[]
{
$"{DateTime.Now.ToString()} The Local System Time has changed",
$"{DateTime.Now.ToString()} Previous Time zone {TimeZoneInfo.Local.DaylightName.ToString()}",
$"{DateTime.Now.ToString()} New Time Zone {TimeZone.CurrentTimeZone.DaylightName.ToString()} and the time is {DateTime.Now.ToLongTimeString()}"
};
//create log file and add the event message
File.AppendAllLines(@"C:\Temp\Heartbeat_Log.txt", lines);
}
.Net 出于性能原因缓存系统本地时区,因此如果您专门监视更改,则需要清除缓存。
在您的事件处理程序中,调用:
TimeZoneInfo.ClearCachedData();
https://docs.microsoft.com/dotnet/api/system.timezoneinfo.clearcacheddata
此外,TimeZone
class 已弃用。仅使用 TimeZoneInfo
.