SSerge писал(а):Я как-то уже обширно намекал, позволю сказать еще раз прямо: временные зоны из реестра MS Windows - информация, имеющая нулевую степень доверия и в общем случае не распространяющаяся за пределы текущего года. Более того, пользователь вашей программы с очень большой степенью вероятности поставит себе временной пояс, не имеющий отношения к его действительному местоположению - по разным причинам, одна из которых - мнение самой MS, что это нормально и допустимо. Так что, сделать то сделали, но степень недостоверности будет всегда чрезвычайно велика.
Я это читал все, спасибо конечно было интересно. Но к вопросу это условно относится. Разговора о местоположении пользователя нет, программе вообще пофиг где пользователь. Ей надо как написано в теме "Как получить время города N?" выдавать время с учетом определенного смещения. У Windows реестр содержит готовые данные с датами, когда надо переводить часы, и как я понимаю она сама каждый год его пересчитывает, потому что дата перевода это ночь с субботы на воскресенье. Не одна БД не будет содержать все даты переводов. А если где то меняется часовой пояс и в реестре этому нет соответствия - бывает, это жизнь. Можно обновление дождаться, можно руками выбрать другой пояс, можно поправить самому реестр. Мне не нужно чтобы программа и ОС шпионила за мной и сама меняла часовые пояса, я в состоянии сам нажать две кнопки чтобы сменить время в ОС. В 90% программ наверно нет необходимости в точном соответствии времени, погрешность на то что пользователь сам поправит неверно отображаемое время допустима.
Пост выше о том, как работать именно с реестром Windows, потому что примеров такого плана нет. Мне вообще не понятно, зачем надо у систему спрашивать "Где я и какой у меня часовой пояс?", а половина примеров именно такие. А как средствами Windows высчитать по известному часовому поясу время на Аляске - ноль примеров. Собственно как и других любых.
Надо иногда думать в будущее. Программы не имеющие техподдержки по своей лицензии вообще не должны работать со своей собственной БД зон времени, ибо брошенная разработчиком на произвол судьбы программа будет выдавать косяков по времени больше чем работающая с данными ОС. Сведения как отредактировать зоны в ОС найти пользователь сможет, а сведения как редактировать временные зоны в программе про которую никто не слышал почти - нет. Кроме того, программа не работающая с данными из сети должна уметь работать оффлайн на 100% и синхронизация с серверами из сети ей не нужна(это только доп опция может быть, а не основной источник данных).
Если разработчик хочет, чтобы его программа работал в 100% соответствии с реалиями, то для Windows идеальный варианты использовать реестр системы по выше описанным причинам. Но сделать модуль, который будет проверять сведения реестра и корректировать их по более свежим данным из других источников. Тогда пользователь не будет иметь проблем с программой и будет иметь возможность синхронизировать часовые пояса с более достоверными источниками. Ему в один прекрасный момент не вылезет "не могу запуститься, потому что удаленная БД оффлайн".