2

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

4

6 回答 6

3

SetTimeZoneInformation应该做你需要的。您需要使用P/Invoke来完成它。

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

于 2008-08-28T16:34:55.950 回答
1

这在 Windows 7 中不起作用。我尝试使用以下环境 windows 7 VSTS-2008 它正在打开更改时区窗口,因为我们手动执行此操作

于 2010-01-13T07:57:38.050 回答
1

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

于 2010-01-29T11:42:34.343 回答
0

试试这个...

首先,您需要在注册表中找到代表您想要的区域的键(“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");

于 2008-08-28T16:48:38.117 回答
0

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

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

于 2008-08-28T17:27:20.567 回答
0

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

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

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

于 2010-01-13T08:18:45.490 回答