Вы можете написать собственную замену localtime () , или использовать инструмент zic .
Прежде всего, однако: вы, вероятно, нехочу сделать это.Цитирование @Panagiotis:
База данных tz регулярно обновляется и распространяется автоматически.Фактически они являются стандартом де-факто.
Фактически, «регулярно обновляемые» в основном предназначены для информации о часовых поясах за прошлый период, потому что часовые пояса просто не меняются так часто.В Buildroot просто установите пакет tzdata
, и у вас есть все часовые пояса в мире.
Для применения информации о часовом поясе вы всегда хотите сделать это как можно позже.Системные часы должны быть в UTC.Отметки времени для файлов также должны быть в UTC.Современные системные регистраторы (например, systemd-journald) также хранят метки времени в UTC.Все время общение по сети должно быть в UTC.Только когда время представлено пользователю, необходимо преобразовать его в местное время (которое может быть различным для разных пользователей).
Чтобы решить вашу проблему с пользовательскими часовыми поясами, проще всего не использовать обычное время.localtime () (или любой другой эквивалент .NET), но вместо этого используйте функцию-обертку, которая сначала проверяет, является ли текущий часовой пояс одним из пользовательских часовых поясов, и в этом случае выполняет ваши собственные вычисления часового пояса.
В качестве альтернативы,Вы можете создать файл часового пояса и записать его в файловую систему.Формат tzfile является двоичным форматом, поэтому, вероятно, проще сгенерировать текстовый файл и преобразовать его с помощью инструмента zic .В Buildroot инструмент zic в данный момент недоступен для цели, поэтому вам нужно обновить package/zic/zic.mk
и добавить package/zic/Config.in
.Вы можете посмотреть, как Buildroot генерирует файлы часовых поясов из файла правил tzdata
в package/tzdata/tzdata.mk
.
Если вам действительно нужно настроить часовой пояс для всей системы (что обычно вам не нужно делать), вы должны создать символическую ссылку на пользовательский часовой пояс из /etc/localtime
и установить ее в /etc/timezone
.И, конечно же, вы должны убедиться, что файл пользовательского часового пояса доступен для записи.Я бы посоветовал дать вашим часовым поясам нестандартные имена, например, начиная с Custom /, и сделать /usr/share/zoneinfo/Custom
символической ссылкой на доступный для записи каталог.