TZSET(3) | Руководство программиста Linux | TZSET(3) |
tzset, tzname, timezone, daylight - инициализирует информацию о преобразованиях времени
#include <time.h>
void tzset (void);
extern char *tzname[2]; extern long timezone; extern int daylight;
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
tzset(): _POSIX_C_SOURCE tzname: _POSIX_C_SOURCE timezone, daylight: _XOPEN_SOURCE || /* начиная с glibc 2.19: */ _DEFAULT_SOURCE || /* в версиях glibc <= 2.19: */ _SVID_SOURCE
Функция tzset() инициализирует переменную tzname из значения переменной окружения TZ. Данная функция автоматически вызывается другими функциями преобразования времени, которые зависят от часового пояса. В системах, совместимых с System V, она также устанавливает переменные timezone (секунд западнее UTC) и daylight (0, если в часовом поясе не используется переход на летнее время, в противном случае ненулевое значение, если есть времена в прошлом, настоящем или будущем, когда применялись правила перехода).
Если переменной TZ в окружении не существует, то используется системный часовой пояс. Системный часовой пояс настраивается копированием или созданием ссылки на файл в формате tzfile(5) в /etc/localtime. База данных часовых поясов с такими файлами может находиться в системном каталоге часовых поясов (смотрите далее раздел ФАЙЛЫ).
Если переменная TZ в окружении существует, но имеет пустое значение или её величина не может быть представлена ни в одном из перечисленных ниже форматов, то используется UTC (Coordinated Universal Time, всемирное координированное время).
Значение TZ может быть представлено в одном из двух форматов. Первый формат — строка символов, которые явно описывают используемый часовой пояс:
std offset[dst[offset][,start[/time],end[/time]]]
В спецификации нет пробелов. Строка std определяет аббревиатуру часового пояса и должна содержать три или более символа алфавита. Если она заключена между знаками "меньше" (<) и "больше" (>), набор символов расширяется за счет добавления знаков "плюс" (+), "минус" (-) и цифр. Строка offset, следующая непосредственно за std, обозначает время, которое необходимо добавить к локальному, чтобы получить Всемирное координированное время (UTC). Значение offset положительно, если локальный часовой пояс находится западнее Гринвичского меридиана, и отрицательна, если восточнее. Количество часов колеблется от 0 до 24, а минут и секунд — от 00 до 59:
[+|-]чч[:мм[:сс]]
Пробелов быть не должно. Строки dst и offset задают название и смещение соответствующего часового пояса по летнему времени. Если offset не указано, то по умолчанию используется значение на час больше поясного времени.
Полем start определяется начало периода летнего времени, а полем end определяется момент перехода обратно на поясное время. Эти поля могут быть представлены в следующих форматах:
В поле time задаётся, когда по действующему времени наступает переход на другое время. Если не указано, то по умолчанию равно 02:00:00.
Вот пример для Новой Зеландии, где поясное (standard) время (NZST) на 12 часов опережает UTC, а летнее (daylight saving) время (NZDT) на 13 часов опережает UTC, которое действует с первого воскресенья октября по третье воскресенье марта, и меняется обратно в 02:00:00 (как значение по умолчанию):
TZ="NZST-12:00:00NZDT-13:00:00,M10.1.0,M3.3.0"
Второй формат используется, если информация о часовом поясе должна быть получена из файла:
:[filespec]
Если указание файла filespec опущено или его значение не может быть понято, то используется всемирное координированное время (UTC). Если значение filespec не пусто, то оно определяет другой файл формата tzfile(5), из которого будет получена информация о часовых поясах. Если значение filespec не начинается с символа «/», то этот файл находится в системном каталоге часовых поясов. Если отсутствует двоеточие, то будет опробован каждый из представленных выше форматов TZ.
Вот ещё один пример для Новой Зеландии:
TZ=":Pacific/Auckland"
Показанные файлы выше — текущие стандартные расположения файлов, но они могут быть изменены при компиляции glibc.
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
tzset() | Безвредность в нитях | MT-Safe env locale |
POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.
В 4.3BSD имелась функция char *timezone(zone, dst), которая возвращала имя часового пояса, соответствующее первому аргументу (минуты западнее UTC). Если второй аргумент равнялся 0, то использовалось поясное имя, иначе использовалась версия для летнего времени.
date(1), gettimeofday(2), time(2), ctime(3), getenv(3), tzfile(5)
2017-09-15 |