我创建了一个时间非常重要的软件。因此,每次传输一些数据时,我也会在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。
有没有人为此解释/解决?这将是非常有帮助的,因为应用程序不幸地已经在实时系统中使用,而且这个问题引起了巨大的问题......
答案 0 :(得分:2)
SetSystemTime需要UTC时间(参见http://msdn.microsoft.com/en-gb/library/windows/desktop/ms724942(v=vs.85).aspx)
因此,如果您从服务器获得的时间为+1,则应在将其传递给SetSystemTime()之前调用.ToUniversalTime()。
作为一般规则,为了让您的生活更简单,我建议您将所有时间保持为UTC,除非在用户界面中显示时 - 将时间转换为当地时间。
答案 1 :(得分:1)
你使用DST吗?如果您尝试禁用它并查看问题是否仍然存在。在使用SetSystemTime()和SetLocalTime()设置系统时间后,我遇到了一个问题,即时钟可能会出现几个小时的错误。
原来,设备制造商没有在驱动程序中正确实现DST,因为实时时钟只能处理本地时间。至少那是他们的解释。关闭夏令时修复了我的问题,除了你必须每年两次手动调整时钟夏令时。