2013-03-13 38 views
0

我创建了一个软件,其中时间非常重要。因为每次传输一些数据,我也会在win ce设备上设置时间。我转移槽插座DateTime.Now.Ticks和设置时间与无法在Win CE设备上设置时间

[的DllImport( “coredll.dll中”)]私有外部静态UINT SetSystemTime(参照SYSTEMTIME lpSystemTime);

时区在PC上正确设置为GMT + 1,其中服务器应用程序正在运行以及设备上。设备上的HomeDST为0。

我的问题是,总有我的软件在操作系统时间和时间之间有一个小时的时差。我检索时间使用

[的DllImport( “coredll.dll中”)]私有外部静态无效 GetSystemTime(参照SYSTEMTIME lpSystemTime);

因此,例如在设备的右上角我看到9:12,比在应用程序8:12。

不要有任何人对此的解释/解决方案?这将是非常有益的,因为应用程序已可惜的活系统中使用,这一个使一个巨大的问题......

回答

2

SetSystemTime发生在UTC时间(见http://msdn.microsoft.com/en-gb/library/windows/desktop/ms724942(v=vs.85).aspx

所以,如果你要的时间从你的服务器是+1,你应该在传递给SetSystemTime()之前调用.ToUniversalTime()。

作为一般规则,让你的生活更简单,我建议让您的所有倍UTC,无处不在,在UI显示时除外 - 这是将其转化为本地时间的时间。

+0

和GetSystemTime还检索它作为UTC,所以我有一个问题...所以我只是通过时区进行调整,这将是确定。谢谢! – HoGo 2013-03-13 16:06:36

+0

对不起,我没有答案,因为问题仍然存在......甚至我使用UTC时间并设置它,而不是使用GetSystemTime取回,我少了一个小时。这两个函数都应该与UTC时间一起工作,但是我从GetSystemTime获得与SetSystem时间设置不同的时间。在第二次调用SetSystemTime时,它有时会再次正确。 – HoGo 2013-03-13 18:55:35

+0

必须纠正一下。从我的观点来看,这完全搞砸了。在完成SetSystemTime之后,我立即用GetSystemTime得到相同的UTC时间,但几秒钟后,GetSystemTime调用的结果发生了改变,并且它少了一个小时。 – HoGo 2013-03-13 19:06:19

1

你使用DST?如果您尝试禁用它并查看问题是否仍然存在。使用SetSystemTime()和SetLocalTime()设置系统时间后,我遇到了一个时钟可能会出现几个小时错误的问题。

原来,在驱动程序的设备制造商没有正确实施DST因为实时时钟只能处理本地时间。至少这是他们的解释。关闭夏令时解决了我的问题,除非您必须每年手动调整时钟两次以实现夏令时。

+0

你能帮我在哪里关闭DST编程?我甚至没有在UI上的设备上找到它。 – HoGo 2013-03-20 15:47:14

+0

查找注册表项[HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Clock]并将AutoDST值更改为0.您可能需要在刷新注册表后重新启动设备。 – user1826673 2013-03-26 09:08:00

相关问题