LINUX.ORG.RU

Работа с високосными секундами в glibc

 ,


0

3

Пытаюсь разобраться с високосными секундами. POSIX утверждает, что gmtime и mktime должны ложить на них болт. Тем не менее, в мануале glibc сказано, что tm_sec в struct tm может быть от 0 до 60, чтобы учитывать при наличии поддержки високосную секунду. Также сказано, что gmtime работает со временем UTC. Человек со здравым рассудком решил бы, что результат вызова gmtime не зависит от переменной TZ и /еtс/localtime. Но беда в том, что в линуксе существует два набора временных зон - right и posix, с учётом и без учёта високосных секунд. Соответственно, поведение gmtime, всё-таки, зависит от того, какая временная зона используется (проверено). Установить, учитываются високосные секунды или нет, несложно. Но как сделать, чтобы gmtime гарантированно не учитывал високосные секунды? TZ=UTC, очевидно, недостаточно, потому что /usr/share/zoneinfo может содержать не позиксовый набор временных зон, а «правильный».


/usr/share/zoneinfo может содержать не позиксовый набор временных зон, а «правильный».

У меня там два набора данных: /usr/share/zoneinfo/right/ и /usr/share/zoneinfo/posix .

Но, мне кажется, по умолчанию используется что-то одно. То что лежит не в right и не в posix, а прямо в /usr/share/zoneinfo.

Если нужна прям 100% предсказуемость результата то таскай файлы временных зон вместе с программой. Возможно, тебе хватит только одного файла — UTC. Путь к файлу можно указать через tzset().

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

У меня там два набора данных: /usr/share/zoneinfo/right/ и /usr/share/zoneinfo/posix

Ага, а у меня /usr/share/zoneinfo-posix, /usr/share/zoneinfo-leap и симлинк /usr/share/zoneinfo.

Но, мне кажется, по умолчанию используется что-то одно. То что лежит не в right и не в posix, а прямо в /usr/share/zoneinfo

Да, если писать TZ=UTC, будет использоваться файл /usr/share/zoneinfo/UTC, но он может быть не из того набора, а где нужный - бог ведает.

Если нужна прям 100% предсказуемость результата то таскай файлы временных зон вместе с программой. Возможно, тебе хватит только одного файла — UTC.

Мне только один UTC и нужен. Действительно, так и сделаю, спасибо за идею.

JaM
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.