如何在 C# 中以编程方式在本地计算机上设置 Windows 时区?使用交互式工具不是一种选择,因为远程单元没有用户界面或用户。远程机器运行 .NET 2.0 和 Windows XP Embedded 以及与中央服务器(通过 Web 服务)通信以自动指导其任务的本地应用程序。我们可以传递一个命令来同步到某个时间/区域组合,但是可以在本地应用程序中放入什么代码来完成更改?设备在安装之前没有针对特定位置进行成像,因此为了在任何位置使用任何设备,我们必须能够同步此信息。
6 回答
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 上运行......哦,是的,我注意到这个论坛识别回车键似乎有一个完整的错误。也许有一天程序员会解决这个问题。
试试这个...
首先,您需要在注册表中找到代表您想要的区域的键(“Central Standard Time”就是一个例子)。这些位于此处:
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", "你要设置的时区的key");
如果您不使用 UTC 传输日期,您将面临数据不正确的风险...如果您更改设备上的时区...您的日期将更远。
您可能希望使用 UTC,然后计算每个时区的时间。
您应该考虑使用 Windows 时间服务,而不仅仅是设置某些系统的时区。它不仅会处理时区。它还将注意日期和时间本身的正确设置。
看看:如何在Windows XP中与Windows Time服务同步时间
即使您可能要在 Vista 或 Windows 7 中进行所有这些设置,也请在此处查看。