Windows mobile часовой пояс

Windows mobile часовой пояс

БлогNot. По поводу «неправильного» времени в мидлетах и перевода времени в Windows Mobile.

По поводу «неправильного» времени в мидлетах и перевода времени в Windows Mobile.

Итак, 25 октября в 03:00 по местному мы опять на час провалимся в прошлое. И мне на полгода перестанут иногда писать о мидлетах, где есть встроенные часы, что они показывают «неверное время».

Начнём с того, что на практике Java работает с «абсолютным» временем, отсчитанным как число миллисекунд, прошедших с полуночи по Гринвичу 1 января 1970 года (класс java.util.Date).

Апплеты и мидлеты могут лишь отобразить это время или поменять его интерпретацию, связанную с часовым поясом или иными факторами. Более того, изменить системное время устройства средствами Java нельзя, а методы, предназначенные для работы с часовыми поясами и учёта летнего/зимнего времени (например, метод useDaylightTime класса java.util.TimeZone в Java2ME) зачастую абстрактные, то есть, объявлены, но не реализованы в библиотеках языка, программист должен написать их сам.

Кстати, по умолчанию Java2ME «обязана» поддерживать только одну временную зону — GMT.

Поэтому корректный учёт времени — это непростая задача, и для прикладных приложений — всё-таки забота Java-машины, а программисту вполне достаточно уметь вызвать методы, возвращающие дату/время для часового пояса по умолчанию.

Из выложенных на сайте мидлетов время отображают в разных видах Alcometr, ServerTime, DateCalc, TimeReminder, Расписания 1 и 2, anClock.

В большинстве телефонов есть настройки часового пояса и учёта летнего/зимнего времени, так что ява-приложение всегда получит нужное время, как и было на Siemens S75, Nokia 6100 и Sony Ericsson К320i, служивших в разное время «тестерами» моих мидлетов.

А вот под Windows Mobile, к примеру, проблемы возможны.

На коммуникаторе E-Ten X500+ с операционкой Windows Mobile 6.1 и ява-машиной IBM MIDP20 (VGA) перечисленные выше мидлеты летом показывают время «на час меньше». Проблема, очевидно, связана с тем, что ява-машина от IBM реализована для американской локали, где перевода часов нет. Таким образом, для корректной работы «алкометра» на этой платформе достаточно выставить поле коррекции времени всегда равным 6. При этом летом часы в поле ввода будут показывать время, на час меньшее, зимой — нормальное. Но на самом деле это одно и то же время. Второй выход — найти ява-машину с локалью, имеющей летнее и зимнее время.

Если мидлет вводит временные данные в режиме «только время» (DateField.TIME) возможны странные вещи — возвращаемое время как бы всегда интерпретируется по Гринвичу, даже если выставить в ява-машине другой часовой пояс.

При этом в документации написано «The date object is constructed according the rules of locale specific calendaring system and defined time zone.»

Рисунок показывает, что возвращает в «Алкометре» код

где вызываемые методы класса mathFunc имеют вид

Вообще говоря, ввод времени в Shedule 2 и Timereminder сделан не по спецификации, то есть, поля ввода DateField в режиме TIME не инициализируются датой 1 января 1970 г.

Поэтому встроенный в WTK эмулятор показывает их как null, но реальные телефоны время отображают.

К сожалению, если сделать всё по спецификации, то есть,

то придётся, как и в алкометре, отдельной опцией учитывать возможное смещение полученного времени из-за часового пояса.

Получается, что в настройках таких мидлетов целесообразно сделать поле для «коррекции времени», которая будет применяться к метке времени, прочитанной из поля ввода даты с форматом Datefield.TIME. Именно так и сделано в Alcometr 1.0.1. Для Новосибирска, например (GMT+6), коррекция будет 6 часов при «зимнем» времени и 7 — при «летнем».

Читайте также:  Ironwolf health management linux

Вообще, в Windows Mobile 6 нет галочки «переход на зимнее/летнее время». Будет ли он совершён, определяется двумя настройками:

  • региональная настройка КПК (Пуск — Настройки — вкладка Система — Язык и стандарты — вкладка Регион);
  • часовой пояс, указанный в системе (Пуск — Настройки — вкладка Система — Часы и сигналы — вкладка Время). Имеет значение и город, выбранный из списка. Например, Каир (GMT+2) переводить на летнее время не будет, т.к. в Египте его нет.

В некоторых менеджерах мобильной Windows, например, Advanced Configuration Tool, есть настройка Daylight Saving (переход на летнее/зимнее время).

Отправлено на постоянное хранение сюда

18.10.2009, 01:37; рейтинг: 12475

Windows mobile часовой пояс

Отмена летнего времени и увеличение декретного времени до +2 часов относительно поясного приводит к некоторым трудностям. Вариант с отключением автоматического перехода подойдёт для домашнего стационарного компьютера. Однако для тех, кто часто выезжает за пределы своего часового пояса, этот вариант не подходит — при переключении часового пояса разница между местным и домашним часовыми поясами будет неверной, например при перелёте из Москвы (UTC +4 часа) в Египет (UTC +2 часа) часы будут переведены на 1 час вместо 2 из-за того, что старый часовой пояс для Москвы UTC +3 часа. В результате вам придётся вручную корректировать время.
Поэтому желательно внести актуальную информацию о часовых поясах в операционные системы компьютера, ноутбука, коммуникатора. Для мобильных телефонов доступен вариант с выставлением часов по информации от GSM-передатчиков оператора сотовой связи, но как показывается практика, эта информация нередко оказывается неправильной.

Данное исправление вносит изменения только для московского часового пояса, поскольку за последние несколько лет часовые пояса в России не раз меняли, и у меня нет достоверной информации об этих изменениях. Было бы неплохо дополнить этот фикс информацией обо всех регионах России и других стран, в которых были изменения часовых поясов.

Для Windows Mobile 5.0 — 6.5 в реестре следует сделать следующие изменения:
В Windows Mobile в реестре хранятся только изменения для встроенной базы часовых поясов, потому стандартно этой ветки в реестре нет.

Код
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\Software\Microsoft\TimeZones\145]
«Display»=»UTC+4 Москва»
«TZI»=hex:10,ff,ff,ff,00,00,00,00,c4,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

Для Windows XP — Windows 7:

Код
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Russian Standard Time]
«MUI_Display»=-
«Display»=»(UTC+04:00) Волгоград, Москва, Санкт-Петербург»
«TZI»=hex:10,ff,ff,ff,00,00,00,00,c4,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

После внесения изменений в реестр необходимо перезагрузить устройство и заново выставить в настройках системы часовой пояс.

Рег-файл для Windows Mobile 5.0 — 6.5 с изменением часовых поясов для России (по информации из Википедии):
DST_Russia_WindowsMobile.reg

Рег-файл для Windows XP — Windows 7 с изменением часовых поясов для России:
DST_Russia_WinXP_Win7.reg

Основной и правильный вариант — установить официальное обновление с сайта Microsoft

Как синхронизировать время Windows Mobile с сервером?

Я использую Windows Mobile 6.5 SDK с С# 3.5. Мне нужно изменить дату/время мобильного соединения с датой/временем сервера (ASP.NET). Я ничего не могу найти.

Обновление: я имею дело с проблемой часового пояса. Если сервер и клиент находятся в одном и том же часовом поясе, у меня нет проблем. Но если часовой пояс отличается, я столкнулся с проблемой.

Изменение времени на мобильном устройстве не сложно – помощник openNETCF упрощает работу, иначе вам нужно сделать что-то вроде:

И LocalClockOffset – это предварительно вычисленная разница между желаемым временем и текущим временем.

Другая часть вашего запроса теперь синхронизируется с сервером. Если вы синхронизируете свой сервер, чтобы сказать time-a.nist.gov, то вы также можете синхронизировать свои мобильные телефоны с тем же.

У Valer Bocan есть отличный код для этого, из которого вышло выше. Ссылка: http://www.bocan.ro/sntpclient

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

Последние часовые пояса – с моими проектами PDA я прохожу через Datetime как GMT с + / – смещением от GMT.

Я столкнулся с той же проблемой и использовал API OpenNETCF для ее решения.

Сначала вы должны скачать его ЗДЕСЬ.

При синхронизации вы должны передать дату на КПК, и, если хотите, вы можете использовать либо XML файл, либо использовать базу данных для установки нужной даты.

Используя OpenNETCF.WindowsCE.dll в своей ссылке на проект, сделайте следующее:

Делая это, вы измените текущую дату на ‘2012-12-23 23:00:00’ Я протестировал это решение на мобильном телефоне 6.1, но, думаю, 6.5 будет делать все отлично.

когда вы имеете дело с серверами и данными и синхронизацией изменений, вы всегда должны использовать значения времени UTC и нет (возможно, неправильные локальные настройки).

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

Во-вторых, мобильное устройство Windows уже поддерживает синхронизацию времени из коробки. В реестре есть запись сервера времени, и ОС использует это для синхронизации времени. Тогда может быть служба, синхронизирующая время и часовой пояс установки и местное время, используя данные поставщика сотового телефона (NITZ).

смена часового пояса

Ответы (4) 

Был ли этот ответ полезным?

К сожалению, это не помогло.

Отлично! Благодарим за отзыв.

Насколько Вы удовлетворены этим ответом?

Благодарим за отзыв, он поможет улучшить наш сайт.

Насколько Вы удовлетворены этим ответом?

Благодарим за отзыв.

Добрый день. Дело в том, что я даже не могу обновления проверить, выдает ошибку 801881е4.

Был ли этот ответ полезным?

К сожалению, это не помогло.

Отлично! Благодарим за отзыв.

Насколько Вы удовлетворены этим ответом?

Благодарим за отзыв, он поможет улучшить наш сайт.

Насколько Вы удовлетворены этим ответом?

Благодарим за отзыв.

Вы пробовали сменить часовой пояс? В настройках вручную установите правильную дату, время, часовой пояс (не смотрите на названия городов), регион. Затем там же в настройках перейдите в Почта+учетные записи, коснитесь и удерживайте Майкрософт, выберите обновить. Если получилось, сразу проверьте наличие обновлений. Не получилось, — снова попробуйте сделать сброс настроек и снова пройдите по тем же настройкам. Снова неудача, — делайте восстановление.

Был ли этот ответ полезным?

К сожалению, это не помогло.

Отлично! Благодарим за отзыв.

Насколько Вы удовлетворены этим ответом?

Благодарим за отзыв, он поможет улучшить наш сайт.

Windows mobile часовой пояс

БлогNot. По поводу «неправильного» времени в мидлетах и перевода времени в Windows Mobile.

По поводу «неправильного» времени в мидлетах и перевода времени в Windows Mobile.

Итак, 25 октября в 03:00 по местному мы опять на час провалимся в прошлое. И мне на полгода перестанут иногда писать о мидлетах, где есть встроенные часы, что они показывают «неверное время».

Начнём с того, что на практике Java работает с «абсолютным» временем, отсчитанным как число миллисекунд, прошедших с полуночи по Гринвичу 1 января 1970 года (класс java.util.Date).

Апплеты и мидлеты могут лишь отобразить это время или поменять его интерпретацию, связанную с часовым поясом или иными факторами. Более того, изменить системное время устройства средствами Java нельзя, а методы, предназначенные для работы с часовыми поясами и учёта летнего/зимнего времени (например, метод useDaylightTime класса java.util.TimeZone в Java2ME) зачастую абстрактные, то есть, объявлены, но не реализованы в библиотеках языка, программист должен написать их сам.

Кстати, по умолчанию Java2ME «обязана» поддерживать только одну временную зону — GMT.

Поэтому корректный учёт времени — это непростая задача, и для прикладных приложений — всё-таки забота Java-машины, а программисту вполне достаточно уметь вызвать методы, возвращающие дату/время для часового пояса по умолчанию.

Из выложенных на сайте мидлетов время отображают в разных видах Alcometr, ServerTime, DateCalc, TimeReminder, Расписания 1 и 2, anClock.

В большинстве телефонов есть настройки часового пояса и учёта летнего/зимнего времени, так что ява-приложение всегда получит нужное время, как и было на Siemens S75, Nokia 6100 и Sony Ericsson К320i, служивших в разное время «тестерами» моих мидлетов.

А вот под Windows Mobile, к примеру, проблемы возможны.

На коммуникаторе E-Ten X500+ с операционкой Windows Mobile 6.1 и ява-машиной IBM MIDP20 (VGA) перечисленные выше мидлеты летом показывают время «на час меньше». Проблема, очевидно, связана с тем, что ява-машина от IBM реализована для американской локали, где перевода часов нет. Таким образом, для корректной работы «алкометра» на этой платформе достаточно выставить поле коррекции времени всегда равным 6. При этом летом часы в поле ввода будут показывать время, на час меньшее, зимой — нормальное. Но на самом деле это одно и то же время. Второй выход — найти ява-машину с локалью, имеющей летнее и зимнее время.

Если мидлет вводит временные данные в режиме «только время» (DateField.TIME) возможны странные вещи — возвращаемое время как бы всегда интерпретируется по Гринвичу, даже если выставить в ява-машине другой часовой пояс.

При этом в документации написано «The date object is constructed according the rules of locale specific calendaring system and defined time zone.»

Рисунок показывает, что возвращает в «Алкометре» код

где вызываемые методы класса mathFunc имеют вид

Вообще говоря, ввод времени в Shedule 2 и Timereminder сделан не по спецификации, то есть, поля ввода DateField в режиме TIME не инициализируются датой 1 января 1970 г.

Поэтому встроенный в WTK эмулятор показывает их как null, но реальные телефоны время отображают.

К сожалению, если сделать всё по спецификации, то есть,

то придётся, как и в алкометре, отдельной опцией учитывать возможное смещение полученного времени из-за часового пояса.

Получается, что в настройках таких мидлетов целесообразно сделать поле для «коррекции времени», которая будет применяться к метке времени, прочитанной из поля ввода даты с форматом Datefield.TIME. Именно так и сделано в Alcometr 1.0.1. Для Новосибирска, например (GMT+6), коррекция будет 6 часов при «зимнем» времени и 7 — при «летнем».

Вообще, в Windows Mobile 6 нет галочки «переход на зимнее/летнее время». Будет ли он совершён, определяется двумя настройками:

  • региональная настройка КПК (Пуск — Настройки — вкладка Система — Язык и стандарты — вкладка Регион);
  • часовой пояс, указанный в системе (Пуск — Настройки — вкладка Система — Часы и сигналы — вкладка Время). Имеет значение и город, выбранный из списка. Например, Каир (GMT+2) переводить на летнее время не будет, т.к. в Египте его нет.

В некоторых менеджерах мобильной Windows, например, Advanced Configuration Tool, есть настройка Daylight Saving (переход на летнее/зимнее время).

Отправлено на постоянное хранение сюда

18.10.2009, 01:37; рейтинг: 12475

Читайте также:  Microsoft lync web app linux
Оцените статью