p / invoke метод GetSystemTime () дает неправильный вывод - PullRequest
0 голосов
/ 04 мая 2010

Я использовал метод p / invoke GetSystemTime () в своем приложении, чтобы получить текущую системную дату и время, но он дает неправильные значения для любого решения для этого ..

Ответы [ 5 ]

6 голосов
/ 04 мая 2010

Ах, время и CF и WinCE. Как весело! Наряду со всеми другими прекрасными ответами, которые вы получили, есть еще кое-что знать:

  1. ОС хранит LocalTime, а не UTC, поэтому GetSystemTime в конечном итоге получает LocalTime и корректирует его в обратном направлении на основе вашего часового пояса и летнего времени, поэтому, если местное время правильное, а SystemTime - нет, то у вас неправильная настройка TZ или DST.
  2. DST может или не может быть правильным из-за его изменения конгрессом, поэтому OEM может потребовать QFE
  3. DST может быть включен или выключен в реестре
  4. CF кэширует смещение часового пояса при запуске, поэтому любая настройка часового пояса делает DateTime.Now неверным, пока вы не перезапустите приложение
  5. Не все устройства могут сохранять время при потере питания (или даже при сбросе)
  6. Время будет "плавать" в течение дня. насколько плохо (от миллисекунд до секунд) зависит от фактической аппаратной реализации
3 голосов
/ 04 мая 2010

Почему бы вам не использовать DateTime.Now?

2 голосов
/ 04 мая 2010

Если возвращаемое время отключено на один час, вы сталкиваетесь с ошибкой перехода на летнее время (которую можно исправить с помощью исправления ).

GetSystemTime возвращает всемирное координированное время (UTC). Возможно, вы ищете только местное время, и в этом случае вы хотите позвонить GetLocalTime (или просто использовать DateTime.Now или DateTime.UtcNow и пропустить PInvoke).

2 голосов
/ 04 мая 2010

В чем проблема?

Правильна ли ваша подпись p / invoke?

Правильно ли вы структурированы?

Как вы работаете с указателем структуры?«вернулся»?

1 голос
/ 04 мая 2010

Что вы подразумеваете под неправильными значениями?
Поскольку вы спрашиваете о Windows CE, возможно, ваша система не сохраняет RTC и не синхронизируется при загрузке, что приводит к отсутствию правильного времени.
Это зависит от платформы. Правильно ли указано время и дата на панели задач (при условии, что они указаны на изображении)?

...