CTIME(3C)

НАЗВАНИЕ
ctime, localtime, gmtime, asctime, cftime, ascftime, tzset - преобразование даты и времени в цепочку символов

СИНТАКСИС

        #include <sys/types.h>
        #include <time.h>

        char *ctime (clock)
        time_t *clock;

        struct tm *localtime (clock)
        time_t *clock;

        struct tm *gmtime (clock)
        time_t *clock;

        char *asctime (tm)
        struct tm *tm;

        extern long timezone;

        extern int daylight;

        extern char *tzname[2];

        void tzset ( )

ОПИСАНИЕ
Аргументом функций ctime, localtime и gmtime служит указатель clock на значение типа time_t, описанного во включаемом файле . Это значение интерпретируется как число секунд, отсчитываемое от 00:00:00 1 января 1970г. всемирного времени. Функция ctime возвращает указатель на цепочку из 26 символов вида

        Sun Jan 16 01:03:52 1987\n\0
где все поля имеют постоянную длину.

Функции localtime и gmtime возвращают указатели на "tm"-структуры, описанные ниже. Localtime вносит поправку на часовой пояс и, возможно, на летнее время; gmtime осуществляет преобразование непосредственно ко всемирному времени, используемому в системе UNIX.

Функция asctime преобразует "tm"-структуру в цепочку из 26 символов (подобную приведенной выше) и возвращает указатель на эту цепочку.

Об явления всех функций, внешних об ектов, а также "tm"-структуры содержатся во включаемом файле . Описание структуры выглядит так:

        struct tm {
          int tm_sec;   /* Секунды (0-59) */
          int tm_min;   /* Минуты (0-59) */
          int tm_hour;  /* Часы (0-23) */
          int tm_mday;  /* День месяца (1-31) */
          int tm_mon;   /* Месяц года (0-11) */
          int tm_year;  /* Год - 1900 */
          int tm_wday;  /* День недели (Воскресенье = 0) */
          int tm_yday;  /* День года (0-365) */
          int tm_isdst;
        };

Отличие tm_isdst от нуля указывает на то, что используется летнее время.

Внешняя переменная timezone типа long содержит разницу в секундах между всемирным временем и местным поясным временем. Скажем, для Восточного поясного времени EST (см. ПРИМЕЧАНИЯ) эта разница составляет 5*60*60. Внешняя переменная daylight отлична от нуля тогда и только тогда, когда должно осуществляться преобразование к летнему времени в соответствии со стандартом США. Программа учитывает особенности этого преобразования в 1974, 1975 годах; при необходимости перечень таких лет может быть расширен.

При наличии переменной окружения с именем TZ, функция asctime использует значение этой переменной для задания часового пояса, отличного от подразумеваемого. Значение TZ представляет из себя трехбуквенное название местного поясного времени (см. ПРИМЕЧАНИЯ), за которым следует число, выражающее отставание поясного времени от гринвичского в часах и далее, возможно, следует трехбуквенное название летнего времени, действующего в данном поясе. К примеру, для Нью-Джерси следует установить значение EST5EDT. Исходя из установленного TZ можно изменить значения внешних переменных timezone и daylight, а во внешнюю переменную

        char *tzname[2] = {"EST", "EDT"};

поместить названия временных шкал. Эти изменения осуществляет функция tzset; обычно она вызывается функцией asctime, но может быть вызвана пользователем и явно.

Следует иметь в виду, что для большинства реализаций системный профайл /etc/profile содержит присваивание переменной TZ [см. profile(4), timezone(4)].

СМ. ТАКЖЕ
time(2), getenv(3C), profile(4), timezone(4), environ(5).

СЮРПРИЗЫ
Значения, возвращаемые описанными функциями, указывают на один и тот же статический массив, содержимое которого полностью изменяется после каждого вызова.

ПРИМЕЧАНИЯ
Всемирным временем называют поясное время 0-го часового пояса, которое представляет из себя местное среднее солнечное время гринвичского меридиана; обозначается GMT (Greenwich Mean Time).

Московское время опережает всемирное на 3 часа.(Это так называемое декретное московское время - не путать с поясным!)

Поясное время Москвы, лежащей во 2-м часовом поясе, опережает всемирное на 2 часа.

Московское летнее время опережает всемирное на 4 часа.

Основная территория США покрывается 4-мя часовыми поясами, то есть 16-м, 17-м, 18-м, 19-м, носящими соответственно специальные названия: Pacific (Тихоокеанский), Mountain (Горный), Central (Центральный), Eastern (Восточный). В них действует соответствующее поясное (Standard) и во всех штатах основной территории, за исключением Аризоны, летнее (Daylight [Saving]) время (Time). Отсюда сокращенные названия: PST, MST, CST, EST, а также PDT, MDT, CDT, EDT.