2010-05-04 42 views
-2

我使用的P/Invoke GetSystemTime()方法,在我的应用程序来获取当前系统日期时间,但它给错误的价值观这方面的任何解决方案..的P/Invoke GetSystemTime()方法是给错了输出

+4

如果您接受问题的答案,人们更可能想回答后续问题。 – Syntactic 2010-05-04 11:57:47

+1

请详细说明您遇到什么问题。当然,开始标记一些答案! – Shaihi 2010-05-04 13:46:46

回答

3

为什么你不使用DateTime.Now

+0

他想为此使用'DateTime.UtcNow'。 – MusiGenesis 2010-05-04 12:02:50

+0

我以为他在说“价值观”是错误的,因为他预计日期在他的时区,而不是UTC - 但希望我们能从他那里得到反馈。 – thelost 2010-05-04 12:09:16

+1

我相信我们会 - 他显然非常擅长选择他的问题的答案。 :) – MusiGenesis 2010-05-04 12:11:50

2

问题是什么?

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

你的结构布局是否正确?

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

2

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

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

+0

谢谢.. GetLocaltime()和SetLocalTime()解决了我的问题 – Sundar 2010-05-25 10:01:50

1

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

6

啊,时间和CF和WinCE。真好玩!随着你已经收到了还有其他事情要知道其他精细答案:

  1. 操作系统存储本地时间,UTC不那么GetSystemTime最终获得本地时间并调整该向后根据您的时区和夏令时,因此如果本地时间正确但SystemTime不正确,那么您的TZ或DST设置错误。
  2. DST可能会或可能不会是正确由于大会改变它,所以一个QFE可以由OEM
  3. DST需要可以在注册表或关闭
  4. 的CF缓存时区偏压在启动,所以任何时区调整呈现DateTime.Now不正确,直到您重新启动您的应用程序
  5. 并非所有设备都可以在断电期间持续时间(甚至是重置)
  6. 时间将在一天中“浮动”。有多严重(毫秒到秒)取决于实际的硬件实施
+0

在CF/WinMo而不是其他平台上工作的更多理由是什么? :) – MusiGenesis 2010-05-04 14:26:05