在C#中远程设置时区

时间:2020-03-05 18:44:30  来源:igfitidea点击:

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

解决方案

回答

SetTimeZoneInformation应该可以满足需求。我们需要使用P / Invoke来实现。

另请注意,我们需要拥有并启用SE_TIME_ZONE_NAME特权。

回答

试试这个...

首先,我们需要在注册表中找到代表所需区域的键("中央标准时间"是一个示例)。这些位于这里:

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", "The key of the time zone you want to set");

回答

如果我们不使用UTC传输日期,则会冒数据不正确的风险。如果我们更改设备上的时区,日期将更加遥远。

我们可能要使用UTC,然后计算每个时区中的时间。

回答

在Windows 7中不起作用。我尝试在以下环境中进行操作
Windows 7的
VSTS-2008
我们正在手动打开"更改时区窗口"

回答

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

看一下:如何将时间与Windows XP中的Windows时间服务同步

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

回答

santosh 
  you are definitly correct. RunDLL32 shell32.dll,Control_RunDLL %SystemRoot%\system32\TIMEDATE.cpl,,/Z %1
  is deprecated for years and will neither run on Windows 2008, R2, Vista, 7, ...
  oh, yes i noticed that this forum seems to have a complete bug with recognizing the enter key. maybe someday the programmer will fix that problem.