0

時間が非常に重要なソフトウェアを作成しました。このため、データが転送されるたびに、wince デバイスの時刻も設定します。私はトラフソケットDateTime.Now.Ticksを転送し、時間を設定します

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

タイム ゾーンは、サーバー アプリケーションが実行されている PC とデバイスで GMT+1 に正しく設定されます。デバイスの HomeDST は 0 です。

私の問題は、OS の時間とソフトウェアの時間に常に 1 時間の差があることです。を使用して時間を取得します

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

たとえば、デバイスの右上隅には、アプリケーションの 8:12 よりも 9:12 が表示されます。

これに対する説明/解決策はありますか?残念ながら、アプリケーションはすでにライブシステムで使用されており、これは大きな問題を引き起こすため、非常に役立ちます...

4

2 に答える 2

2

SetSystemTimeはUTCで時間がかかります(http://msdn.microsoft.com/en-gb/library/windows/desktop/ms724942(v=vs.85).aspxを参照)

したがって、サーバーから+1の時間を取得している場合は、サーバーで.ToUniversalTime()を呼び出してから、SetSystemTime()に渡す必要があります。

原則として、生活を簡素化するために、UIに表示する場合を除いて、すべての時間をUTCとして保持することをお勧めします。これは、現地時間に変換する時間です。

于 2013-03-13T15:55:25.153 に答える
1

DST を使用しますか? 無効にしてみて、問題が解決しないかどうかを確認してください。SetSystemTime() と SetLocalTime() の両方でシステム時刻を設定した後、時計が数時間ずれることがあるという問題がありました。

リアルタイム クロックはローカル タイムしか処理できなかったため、デバイス メーカーはドライバーに DST を適切に実装していなかったことが判明しました。少なくともそれが彼らの説明でした。DST をオフにすると問題が解決しましたが、夏時間のために年に 2 回時計を手動で調整する必要があります。

于 2013-03-20T09:48:10.857 に答える