0

我创建了一个软件,其中时间非常重要。因此,每次传输一些数据时,我都会在 win ce 设备上设置时间。我通过套接字 DateTime.Now.Ticks 传输并设置时间

[DllImport("coredll.dll")] private extern static uint SetSystemTime(ref SYSTEMTIME lpSystemTime);

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

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

[DllImport("coredll.dll")] private extern static void GetSystemTime(ref SYSTEMTIME lpSystemTime);

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

有人对此有解释/解决方案吗?这将非常有帮助,因为不幸的是,应用程序已经在实时系统中使用了,而这会带来很大的问题......

4

2 回答 2

2

SetSystemTime 采用 UTC 时间(请参阅http://msdn.microsoft.com/en-gb/library/windows/desktop/ms724942(v=vs.85).aspx

因此,如果您从服务器获取时间为 +1,则应在将其传递给 SetSystemTime() 之前对其调用 .ToUniversalTime()。

作为一般规则,为了让您的生活更简单,我建议您在任何地方都将所有时间都保持为 UTC,除非在 UI 中显示 - 这是将它们转换为本地时间的时间。

于 2013-03-13T15:55:25.153 回答
1

Do you use DST? If you do try disabling it and see if the problem persists. I had a problem where the clock could go several hours wrong after setting the system time with both SetSystemTime() and SetLocalTime().

It turned out the device manufacturer hadn't properly implemented DST in a driver because the real time clock could only handle local time. At least that was their explanation. Turning off DST fixed my problem except you have to manually adjust the clock two times a year for daylight saving time.

于 2013-03-20T09:48:10.857 回答