localtime()
ведет себя подобно gmtime()
за исключением того, что создается объект struct tm
, выраженный в показателях местного времени. Местное время определяется для всей системы путем установки файлов часовых поясов. Его можно переопределить с помощью переменной окружения TZ
для пользователей, работающих в часовом поясе, отличном от того, в котором находится компьютер.
time_t mktime(struct tm *tp);
mktime()
преобразует struct tm
в time_t
, предполагая, что struct tm
выражается в показателях местного времени.
time_t timegm(struct tm *tp);
timegm()
ведет себя подобно mktime()
за исключением предположения о том, что struct tm
выражается в показателях UTC. Данная функция не является стандартной.
double difftime(time_t time1, time_t time0);
difftime()
возвращает число с плавающей запятой, представляющее разность во времени в секундах между двумя значениями time_t
. Хотя time_t
гарантированно принадлежит к арифметическому типу, единица измерения не определяется в ANSI/ISO С; difftime()
возвращает разность в секундах в зависимости от единиц измерения time_t
.
Еще четыре функции применяются для преобразований времени из чисел, которые обрабатывает компьютер, в текстовые представления, удобные для человека. Последняя функция не входит в число стандартных вопреки своей очевидной всеобщей полезности.
char *asctime(struct tm *tp);
char *ctime(time_t *t);
asctime()
и ctime()
служат для преобразования временных значений в стандартную строку даты Unix, которая выглядит примерно так:
Tue Jun 17 23:17:29 1997
В обоих случаях длина сроки равна 26 символам и включает в себя завершающие символы новой строки и '\0'
.
Не во всех локалях длина строки обязательно равна 26 символам, как в стандартной локали С.
ctime()
выражает указанную дату в местном времени; asctime()
— в том часовом поясе, который указан в struct tm
. Если последний объект был создан с помощью gmtime()
, то в показателях UTC, если при помощи localtime()
, то по местному времени.
size_t strftime (char *s, size_t max, char *fmt, struct tm *tp);
strftime()
работает также как sprintf()
для времени. Она форматирует struct tm
в соответствии с форматом fmt
и размещает результат в не более чем max
байтах (включая завершающий символ '\0'
) строки s
.
Подобно sprintf()
, функция strftime()
использует символ %
для ввода управляющих последовательностей, в которые подставляются данные. Все подстановочные строки выражаются в показателях текущей локали. Однако сами управляющие последовательности являются совершенно разными. В некоторых случаях строчные буквы применяются для аббревиатур, а заглавные буквы — для полных имен. В отличие от sprintf()
, здесь отсутствует опция употребления чисел в середине управляющей последовательности для ограничения длины подстановочной строки; выражение %.6А
недопустимо. По аналогии с функцией sprintf()
, strftime()
возвращает количество символов, выведенных в буфер s
. Равенство данной величины значению max
означает, что объем буфера недостаточен для текущей локали; необходимо выделить больший буфер и попытаться снова.
strftime()
использует те же самые подстановки, что и программа работы с датами. Ниже приводятся определения для подстановок в стандартной локали, они служат для того, чтобы помочь вам идентифицировать тип информации. В остальных локалях они могут отличаться.