p / invoke GetSystemTime()方法输出错误

时间:2010-05-04 11:53:17

标签: compact-framework pinvoke windows-ce

我在我的应用程序中使用了p / invoke GetSystemTime()方法来获取当前的系统日期时间,但它为此提供了错误的任何解决方案..

5 个答案:

答案 0 :(得分:6)

啊,时间和CF和WinCE。真有趣!除了您收到的所有其他精美答案外,还有其他事项需要了解:

  1. 操作系统存储LocalTime,而不是UTC,因此GetSystemTime最终获得LocalTime,并根据您的时区和DST向后调整,所以如果本地时间正确但SystemTime不是,那么您的TZ或DST设置错误。
  2. 由于国会更改DST可能会或可能不正确,因此OEM可能要求QFE
  3. DST可能在注册表中打开或关闭
  4. CF将时区偏差缓存为启动,因此在重新启动应用程序之前,任何时区调整都会导致DateTime.Now不正确
  5. 并非所有设备都可以在断电(甚至复位)时保持时间
  6. 时间将全天“浮动”。多么糟糕(毫秒到秒)取决于实际的硬件实现

答案 1 :(得分:3)

为什么不使用DateTime.Now

答案 2 :(得分:2)

有什么问题?

你的p / invoke签名是否正确?

你的结构是否正确布局?

你如何处理'返回'的结构指针?

答案 3 :(得分:2)

如果返回的时间关闭一小时,那么您将遇到夏令时错误(可以使用hotfix修复)。

GetSystemTime返回协调世界时(UTC)。您可能只是在寻找当地时间,在这种情况下,您想要拨打GetLocalTime(或者只使用DateTime.NowDateTime.UtcNow,并跳过PInvoke内容。)

答案 4 :(得分:1)

错误的数值是什么意思?
由于您询问的是Windows CE,可能是因为您的系统没有保存RTC并且在启动时没有同步,导致没有正确的时间。
这是特定于平台的。任务栏中的时间和日期是否正确(假设您在图像中有这个)?