Как в программе изменить часовой пояс?

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Ответить
MiK13
Сообщения: 1164
ОС: Linux Debian

Как в программе изменить часовой пояс?

Сообщение MiK13 »

АРМ, который мы разрабатываем, может быть установлен за пределами РБ, поэтому возникла необходимость ввести установку часового пояса. Значение смещения (в часах) задаётся в АРМе в специальном поле.
Я попробовал это сделать просто копируя файл /usr/share/zoneinfo/Etc/GMTofs в файл /etc/localtime.
Но в системе время при этом меняется, а вот на localtime, вызываемое в программе это действует только один раз. Хотя dpkg-reconfigure tzdata меняет всегда.
Может быть нужно выдать какой-нибудь дополнительный запрос? Или dpkg-reconfigure tzdata можно выдать как-то в пакетном режиме, чтобы он поменял часовой пояс?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как в программе изменить часовой пояс?

Сообщение Bizdelnick »

Ну так посмотрите скрипт /var/lib/dpkg/info/tzdata.config и сделайте, как там.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
MiK13
Сообщения: 1164
ОС: Linux Debian

Re: Как в программе изменить часовой пояс?

Сообщение MiK13 »

Bizdelnick писал(а):
12.10.2017 18:23
Ну так посмотрите скрипт /var/lib/dpkg/info/tzdata.config и сделайте, как там.

Спасибо. Попытаюсь разобраться.
Хотя, на мой взгляд, вызов system("dpkg-reconfigure -fgnome tzdata&"); (по специальной кнопке или комбинации клавиш) будет корректнее.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как в программе изменить часовой пояс?

Сообщение Bizdelnick »

Тогда уж лучше использовать debconf-set-selections.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: Как в программе изменить часовой пояс?

Сообщение s.xbatob »

тут всё не так просто. Вообще-то просто, но есть подводные камни.
Главным тут является файл /etc/localtime, Только libc его кеширует (а может ещё что делает), но его динамическое изменение уже не сработает.
Ещё есть достаточно способов договорится про зону, но всё равно: данные кешируются и не будут применены к уже работающим программам.
Но если вы с запущенными программами по зонам не скачете, то вас это волновать не должно.

Спасибо сказали:
MiK13
Сообщения: 1164
ОС: Linux Debian

Re: Как в программе изменить часовой пояс?

Сообщение MiK13 »

s.xbatob писал(а):
12.10.2017 21:41
Главным тут является файл /etc/localtime,
Это я понял уже давно. Заменяю этот файл и тут же date показывает другие значения.
s.xbatob писал(а):
12.10.2017 21:41
Только libc его кеширует (а может ещё что делает), но его динамическое изменение уже не сработает.
Понятно, почему его замена не влияет на данные в программе. Хотя не понятно почему первая замена меняет временную зону.
s.xbatob писал(а):
12.10.2017 21:41
Но если вы с запущенными программами по зонам не скачете, то вас это волновать не должно.
Я вообще не вижу смысла вставлять в рабочую программу установку часового пояса. Установили АРМ -- и настроили часовой пояс в СИСТЕМЕ. Издало правительство постановление, что "теперь часовой пояс в этом регионе будет другим" -- пришёл системный администратор, вошёл как root, выдал dpkg-reconfigure tzdata или, ещё лучше, заменил файл /etc/localtime на новый и опять система продолжила работать.
Но, когда разрабатывали программу, почему-то решили иначе.
Спасибо сказали:
MiK13
Сообщения: 1164
ОС: Linux Debian

Re: Как в программе изменить часовой пояс?

Сообщение MiK13 »

Bizdelnick писал(а):
12.10.2017 20:23
Тогда уж лучше использовать debconf-set-selections.

Почитал что это такое. Сначала подумал, что это будет наилучшим вариантом.
Но попробовал... первый раз команда echo tzdata tzdata/Zones/Etc select GMT+2 | debconf-set-selections прошла, часы (вверху экрана) "прыгнули" с 10 часов на 5 часов. (кстати, удивило, что часовой пояс GMT+02 -- это смещении -0200).
Но вот дальше эта команда работать отказалась. То есть никаких сообщений, но время не меняется.

В общем, показал вчера начальнику, что часовой пояс меняется, но не сразу -- изменение времени действует после перезапуска АРМа.
Но не возражал.
Спасибо сказали:
Ответить