2008-08-28 26 views
2

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

回答

3

SetTimeZoneInformation应该做你所需要的。你需要使用P/Invoke来解决它。

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

0

尝试......

首先,你需要找到,在注册表中,代表您要该区域的关键(“中央标准时间”就是一个例子)。这些都坐落在这里:

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows NT \当前版本\ Time区域

因此,考虑到这一点,创建一个批处理文件, “SetTimeZone.bat” 与在它下面的行:

RUNDLL32 SHELL32.DLL,Control_RunDLL%SYSTEMROOT%\ SYSTEM32 \ TIMEDATE.cpl ,,/Z%1

从C# ,请致电:

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

0

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

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

1

这不是在Windows 7中工作,我曾尝试用以下的环境 Windows 7的 VSTS 2008 它打开更改时区窗口,因为我们做手工

1

santosh 您确定无误。 RunDLL32 shell32.dll,Control_RunDLL%SystemRoot%\ system32 \ TIMEDATE。cpl ,,/Z%1 已被弃用多年,并且不会在Windows 2008,R2,Vista,7,... 上运行哦,是的,我注意到这个论坛似乎有一个识别输入密钥的完整错误。也许有一天程序员会解决这个问题。