АРМ, который мы разрабатываем, может быть установлен за пределами РБ, поэтому возникла необходимость ввести установку часового пояса. Значение смещения (в часах) задаётся в АРМе в специальном поле.
Я попробовал это сделать просто копируя файл /usr/share/zoneinfo/Etc/GMTofs в файл /etc/localtime.
Но в системе время при этом меняется, а вот на localtime, вызываемое в программе это действует только один раз. Хотя dpkg-reconfigure tzdata меняет всегда.
Может быть нужно выдать какой-нибудь дополнительный запрос? Или dpkg-reconfigure tzdata можно выдать как-то в пакетном режиме, чтобы он поменял часовой пояс?
Как в программе изменить часовой пояс?
Модератор: Bizdelnick
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как в программе изменить часовой пояс?
Ну так посмотрите скрипт /var/lib/dpkg/info/tzdata.config и сделайте, как там.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Как в программе изменить часовой пояс?
Bizdelnick писал(а): ↑12.10.2017 18:23Ну так посмотрите скрипт /var/lib/dpkg/info/tzdata.config и сделайте, как там.
Спасибо. Попытаюсь разобраться.
Хотя, на мой взгляд, вызов system("dpkg-reconfigure -fgnome tzdata&"); (по специальной кнопке или комбинации клавиш) будет корректнее.
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как в программе изменить часовой пояс?
Тогда уж лучше использовать debconf-set-selections.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Как в программе изменить часовой пояс?
тут всё не так просто. Вообще-то просто, но есть подводные камни.
Главным тут является файл /etc/localtime, Только libc его кеширует (а может ещё что делает), но его динамическое изменение уже не сработает.
Ещё есть достаточно способов договорится про зону, но всё равно: данные кешируются и не будут применены к уже работающим программам.
Но если вы с запущенными программами по зонам не скачете, то вас это волновать не должно.
Главным тут является файл /etc/localtime, Только libc его кеширует (а может ещё что делает), но его динамическое изменение уже не сработает.
Ещё есть достаточно способов договорится про зону, но всё равно: данные кешируются и не будут применены к уже работающим программам.
Но если вы с запущенными программами по зонам не скачете, то вас это волновать не должно.
Re: Как в программе изменить часовой пояс?
Это я понял уже давно. Заменяю этот файл и тут же date показывает другие значения.
Понятно, почему его замена не влияет на данные в программе. Хотя не понятно почему первая замена меняет временную зону.
Я вообще не вижу смысла вставлять в рабочую программу установку часового пояса. Установили АРМ -- и настроили часовой пояс в СИСТЕМЕ. Издало правительство постановление, что "теперь часовой пояс в этом регионе будет другим" -- пришёл системный администратор, вошёл как root, выдал dpkg-reconfigure tzdata или, ещё лучше, заменил файл /etc/localtime на новый и опять система продолжила работать.
Но, когда разрабатывали программу, почему-то решили иначе.
Re: Как в программе изменить часовой пояс?
Почитал что это такое. Сначала подумал, что это будет наилучшим вариантом.
Но попробовал... первый раз команда echo tzdata tzdata/Zones/Etc select GMT+2 | debconf-set-selections прошла, часы (вверху экрана) "прыгнули" с 10 часов на 5 часов. (кстати, удивило, что часовой пояс GMT+02 -- это смещении -0200).
Но вот дальше эта команда работать отказалась. То есть никаких сообщений, но время не меняется.
В общем, показал вчера начальнику, что часовой пояс меняется, но не сразу -- изменение времени действует после перезапуска АРМа.
Но не возражал.