【问题标题】:Application does not see system time zone changes until restarted [duplicate]应用程序在重新启动之前看不到系统时区更改[重复]
【发布时间】:2014-06-17 02:33:51
【问题描述】:

我觉得这是一个非常简单的问题,之前一定有人遇到过这个问题。要么我找不到正确的搜索关键词,要么没有人真正遇到过这个问题。

我的问题是当我进入 windows 系统时间并更改时区时,系统托盘时间会相应更新,但我正在运行的应用程序似乎完全没有注意到这一事实。我尝试过的所有 .NET 对象似乎都没有反映系统时区已更改的事实。我已经检查了以下对象,之前和之后,看看它们是否发生了变化并且没有:

DateTime.Now;
DateTime.Now.Offset;
TimeZone.CurrentTimeZone.StandardName;

这对我来说是一个非常边缘的案例,时区会在应用程序的同一电源周期中发生变化,但无论如何,我必须解决它。有没有办法告诉 .NET 框架“刷新你的时区”之类的?

【问题讨论】:

    标签: c# windows datetime time timezone


    【解决方案1】:

    查看该属性的文档:

    http://msdn.microsoft.com/en-us/library/system.timezone.currenttimezone(v=vs.110).aspx

    在第一次使用 CurrentTimeZone 检索时区信息后缓存本地时区数据。如果系统的本地时区随后发生更改,则 CurrentTimeZone 属性不会反映此更改。如果您需要在应用程序运行时处理时区更改,请使用 TimeZoneInfo 类并调用其 TimeZoneInfo.ClearCachedData 方法。

    TimeZoneInfo local = TimeZoneInfo.Local;
    
    TimeZoneInfo.ClearCachedData();
    local = TimeZoneInfo.Local; //updated local time zone info
    

    【讨论】:

    • 谢谢。最后,我遇到了另一个thread,提到使用 System.Globalization.CultureInfo.CurrentCulture.ClearCachedData(),它有效,但我不知道这会对我的应用程序的其余部分产生多大影响。 TimeZoneInfo.ClearCachedData() 似乎至少会更有针对性,希望只清除我想要清除的时区信息。
    猜你喜欢
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2020-03-19
    • 2019-11-18
    • 1970-01-01
    相关资源
    最近更新 更多