问题

如何在C#中以编程方式在本地计算机上设置Windows时区?使用交互式工具不是一种选择,因为远程单元没有用户界面或用户。远程计算机运行.NET 2.0和Windows XP Embedded以及与中央服务器(通过Web服务)通信的本地应用程序,用于自动指导其任务。我们可以提供同步到某个时间/区域组合的命令,但是可以在本地应用程序中放置什么代码来完成更改?在安装之前,设备不会针对特定位置进行成像,因此为了在任何位置使用任何设备,我们必须能够同步这些信息。

解决方案

SetTimeZoneInformation 应该可以满足您的需求。您需要使用 P / Invoke 来获取它。

另请注意,您需要拥有并启用SE_TIME_ZONE_NAME权限。

其他提示

这在Windows 7中不起作用。我尝试过以下环境 Windows 7的 VSTS 2008 我们手动打开更改时区窗口

  

桑托什   你肯定是正确的。 RunDLL32 shell32.dll,Control_RunDLL%SystemRoot%\ system32 \ TIMEDATE.cpl ,, / Z%1   已弃用多年,并且不会在Windows 2008,R2,Vista,7,...上运行   哦,是的,我注意到这个论坛似乎有一个完整的错误,识别回车键。也许有一天程序员会解决这个问题。

试试这个......

首先,您需要在注册表中找到代表您所需区域的密钥(“中央标准时间”是一个示例)。它们位于:

  

HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ Current Version \ Time Zones

因此,考虑到这一点,创建一个批处理文件,“SetTimeZone.bat”。其中包含以下行:

  

RunDLL32 shell32.dll,Control_RunDLL%SystemRoot%\ system32 \ TIMEDATE.cpl ,, / Z%1

从C#,致电:

  

System.Diagnostics.Process.Start(" SetTimeZone.bat","“您要设置的时区的键”);

如果您不使用UTC传输日期,您将面临数据不正确的风险......如果您更改设备上的时区......您的日期将会更远。

您可能希望使用UTC,然后计算每个时区的时间。

您应该考虑使用Windows时间服务,而不仅仅是设置某些系统的时区。它不仅会处理时区。它还会关注日期和时间本身的正确设置。

请查看:如何在Windows中与Windows时间服务同步时间XP

即使您可能要在Vista或Windows 7中进行所有这些设置,请查看这里

许可以下: CC-BY-SA归因
不隶属于 StackOverflow