2013-03-13 3 views
0

Я создал программное обеспечение, где время очень важно. Из-за этого каждый раз, когда переносятся некоторые данные, я устанавливаю также время на устройстве win ce. Я передать корыто сокет DateTime.Now.Ticks и установить время сНе удалось установить время на устройстве Win CE

[DllImport ("coredll.dll")] частная ехЬегп статическая UINT SetSystemTime (ссылка SYSTEMTIME lpSystemTime);

Часовой пояс установлен на GMT + 1 на ПК, где работает серверное приложение, а также на устройстве. HomeDST - 0 на устройстве.

Моя проблема заключается в том, что всегда есть разница между часами в ОС и временем в моем программном обеспечении. Я получение времени с помощью

[DllImport ("coredll.dll")] частный EXTERN статической силы 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, вы должны вызывать его .ToUniversalTime(), прежде чем передавать его в SetSystemTime().

Как правило, чтобы сделать вашу жизнь проще, я бы посоветовал хранить все свое время как UTC, везде, кроме случаев, когда вы показываете в пользовательском интерфейсе - это время перевести их на местное время.

+0

И GetSystemTime получает его также как UTC, поэтому у меня есть проблема ... Поэтому мне просто нужно настроить его по часовой стрелке, и все будет в порядке. Спасибо! – HoGo

+0

Извините, я отменил ответ, потому что проблема все еще здесь ... Даже я использую время UTC и устанавливаю его, а не возвращаю GetSystemTime, я получаю на один час меньше. Обе функции должны работать с временем UTC, но я получаю разное время от GetSystemTime, поскольку оно было задано временем SetSystem. При повторном вызове SetSystemTime иногда бывает правильно. – HoGo

+0

Имейте, чтобы исправить это немного. Это полностью перепутано с моей точки зрения. Сразу же после выполнения SetSystemTime я получаю то же время UTC с помощью GetSystemTime, но через несколько секунд результат вызова GetSystemTime изменяется, и на один час меньше. – HoGo

1

Вы используете DST? Если вы попытаетесь отключить его и посмотрите, сохраняется ли проблема. У меня возникла проблема, когда часы могут на несколько часов ошибиться после установки системного времени с помощью SetSystemTime() и SetLocalTime().

Оказалось, что изготовитель устройства неправильно использовал DST в драйвере, поскольку часы реального времени могут обрабатывать только локальное время. По крайней мере, это было их объяснением. Отключение DST фиксировало мою проблему, за исключением того, что вы должны вручную настраивать часы два раза в год для летнего времени.

+0

Не могли бы вы помочь мне, где бы программно отключить DST? Я даже не нашел его на устройстве в пользовательском интерфейсе. – HoGo

+0

Найдите раздел реестра [HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Clock] и измените значение AutoDST на 0. Возможно, вам придется перезагрузить устройство после очистки реестра. – user1826673

Смежные вопросы