关于dst:如何在不进行Windows更新的情况下自动更新各个国家/地区的夏令时的Windows定义

How to automatically update Windows definitions of daylight saving times in various countries without doing Windows update

我们有一个Windows服务器应用程序,必须知道各个国家/地区的夏令时(DST)。
(注意:这不是关于为计算机本身设置正确的夏令时的问题)

为了使其保持最新,Windows更新有时还包括对DST元定义的更新。
如果例如当DST从4月的第一个星期日开始到4月的第二个星期日时,一个国家突然决定改变规则,这一点很重要。

但是,由于这是生产服务器,因此禁用自动Windows更新。

Microsoft不时发布具有此类更改的修补程序,可以在不使用Windows-Update的情况下应用。 但是,对于每个此修补程序,都会创建一个新的Microsoft KB,它具有自己的专有URI,这使得无法进行自动更新。

问题:我们如何安排任务,定期下载并应用所有补丁


您是否可以在不运行Windows Update的情况下自动更新Windows,或者有选择地告诉Windows仅更新时区数据?不 - 抱歉,没有机制。

您可以手动观看Microsoft夏令时的RSS源。时区博客并自行应用更新,但没有以编程方式执行此操作。

由于您在评论中提到您的应用程序是.NET并且您可以修改它,我将为您提供另一个选项。 (顺便说一下,如果没有问题的这个方面,你的问题将成为StackOverflow的主题)。

在.NET应用程序中处理时区的常用方法是使用TimeZoneInfo类,该类依赖于Windows来获取当前时区数据。但是,还有另一种选择,您可以编写应用程序以使用IANA时区数据库而不是Windows时区数据。这两个数据源之间的差异在时区标记wiki的"Time Zne Databases"部分中有所介绍。

在.NET中,到目前为止,使用IANA数据库的最佳方式是通过Noda Time库。我建议您阅读用户指南,了解如何在您的应用程序中使用此库。

假设您已将应用程序更新为使用Noda Time而不是TimeZoneInfo,现在可以按照此处的说明操作,了解如何使用最新时区数据更新它。基本上,您可以定期(每天,每周等)ping一个URL,以查看是否有更新版本的Nz Time的.NZD格式的tzdb。您可以轻松编写应用程序以下载新数据文件并进行安装。现在您已经删除了对Windows时区数据的依赖性,因此不再需要关注Windows更新或时区修补程序。