2012-08-22 121 views
0

我正在尝试解决夏令时问题。该代码将运行在嵌入在.net 2.0 fw下的Windows XP上。除了一个小问题之外,我有一切工作。要求是以编程方式在TimeDate.cpl面板中设置夏令时设置,该面板只是您设置日期和时间的窗口。我发现要做到这一点的唯一方法是创建一个注册表项,这确实有效。但是,直到您物理打开TimeDate窗口,点击时区面板并点击应用,它才会生效。即使重新启动也不会这样做。我的问题是:有没有办法让我的C#应用​​程序打开TimeDate窗口并单击apply?无法应用夏令时在C#中的更改

回答

0

可能不会,因为你首先做错了。 :-)

正确的做法是使用API​​函数 SetDaylightTime,它接受一个参数,指示夏令时是否在本地时区生效。 上面提到的函数在XP Embedded上不可用,显然。剩下的是有效的,AFAIK。

对于使用注册表,您不需要TimeDate控制面板小程序;您可以使用Daylight Saving Time Registry Settings中的代码示例作为示例直接在代码中执行此操作。注意在代码中调用RegFlushKey;他们使这些变化持续下去。另外请注意,它提到更改对下一次重新启动有影响,而不是立即;这就是WinXP桌面(以及Vista/Win7,IIRC)的工作方式。

+0

这就是我用来设置时区。我不清楚这是否允许您切换夏令时。 –

+0

对不起;我不知道你引用的是我的答案的哪个版本。 (我首先发布了一个不正确的文章,然后用'SetDaylightTime'发布了这个修正后的版本。)如果是'SetDaylightTime'的答案,文档特别指出该函数的目的是表明夏令时是否生效; Windows会根据需要根据UTC调整时间。 –

+0

RegFlushKey调用看起来很有希望。我试图将它移植到C#以便我可以测试它。 –