2013-03-13 67 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

相關問題