Установка часового пояса с помощью Compact Framework в Windows Mobile 6 - PullRequest
5 голосов
/ 12 июня 2009

Во-первых, предыстория: у меня есть приложение .Net, которое работает в режиме киоска на устройствах Windows Mobile 6 (IPAQ 210). Наше программное обеспечение фактически отслеживает часовой пояс пользователя независимо от операционной системы, поэтому мы рассчитываем отображаемое время на основе его настройки часового пояса по UTC. Как многие могут знать, в Windows Mobile 6 добиться настоящего режима киоска нелегко, и последний кусочек головоломки для этого приложения - подавление уведомлений DST от ОС.

Мое предпочтительное решение для этого было бы установить часовой пояс устройства на GMT Касабланка, так как он не наблюдает летнее время. Однако я обнаружил, что, несмотря на все мои усилия (включая использование библиотеки OpenNETCF), я не могу заставить часовой пояс надежно придерживаться в процессе инициализации устройства. В апплете даты / времени в ОС он выглядит как часовой пояс GMT, но время на единицу от того, которое должно быть для этого часового пояса.

Кто-нибудь может посоветовать, как правильно настроить изменение часового пояса? Или, еще лучше, кто-нибудь знает, как отключить уведомление DST на WinMob 6?

Ответы [ 5 ]

3 голосов
/ 10 марта 2010

По какой-то причине, CF на самом деле кэширует информацию о часовом поясе при запуске (я думаю, что полная структура тоже делает). Поэтому, когда вы вносите изменения в часовой пояс, CF не знает об этих изменениях. Если вы используете API GetSystem / LocalTime, вы получите правильное время, но DateTime.Now не будет отражать эти изменения.

Я сообщил об этом еще в 2004 году .

На рабочем столе у ​​вас есть метод TimezoneInfo.ClearCachedInfo , но он не существует в CF.

1 голос
/ 12 июня 2009

Я также столкнулся с отключением одной ошибкой при смене часовых поясов, но в eVC еще не CF. В конце концов, я решил, что это вызвано изменением часового пояса устройства с часового пояса, который уже был в DST, на часовой пояс, который не был в DST. Похоже, он работал правильно в те месяцы года, когда мы работали по стандартному времени, но не работал, когда у нас было летнее время. Очень надоедливый.

В конце концов я настроил часовой пояс и время дважды. Это было (обычно) правильно во второй раз.

1 голос
/ 12 июня 2009

Вы можете установить его в реестре. Просто установите значение HKLM \ Time \ TimeZoneInformation. Существует также функция, которую можно вызвать: SetTimeZoneInformation .

0 голосов
/ 11 октября 2011

Я успешно использовал OpenNETCF.WindowsCE.DateTimeHelper класс. Моя платформа:

Windows Mobile 6.1

CF 3,5

0 голосов
/ 10 марта 2010

Я столкнулся с той же самой ошибкой перехода на летнее время в Windows Mobile 5. Похоже, что проблема связана с ОС, а не с .NET, поскольку я использовал вызов API SetSystemTime в устройство, передающее значение DateTime.UtcNow сервера (которое всегда было точным и никогда не выключалось на час). Я так и не смог отследить проблему дальше, потому что мы приняли решение оставить все устройства в одном часовом поясе с сервером. Ошибка произошла только при установке системного времени на устройстве, настроенном на другой часовой пояс, чем сервер.

Я никогда не видел, чтобы об этой проблеме сообщали где-либо, несмотря на обширный поиск, что означает, что одно из следующего верно:

  1. Большинство пользователей устройств WinMo устанавливают собственное время и часовой пояс вручную, поэтому эта проблема никогда не возникает
  2. Проблема связана со сборкой, а не с ОС (проблема, которую я видел, была на iPAQ, но я не помню, пытался ли я воспроизвести проблему на другом устройстве)
  3. Я клинически безумен, и этого никогда не случалось
...