Эта глава посвящен функциям работы со временем (прошедшем, текущим или вычисленным) и для вычислений, использующих время.
Файл time.h определяет три типа: clock_t и time_t оба служат для представления времени в удобном для произведения арифметических операций виде (В этой реализации величины типа clock_t имеют наивысшую точность, воэможную для данного компьютера, а точность величин типа time_t составляет одну секунду.), тип size_t определен для представления размеров.
В time.h также определяется структура tm для стандартного представления времени по грегорианскому календарю как цепочки чисел со следующими полями:
Секунды.
Минуты.
Часы.
День.
Месяц.
Год (с 1900).
День недели: число дней с воскpесенья.
Число дней, пpошедших с пеpвого янваpя.
Флаг летнего вpемени: положительное значение означает, что действyет летнее вpемя, нyлевое - что оно не действyет, отpицательное - что данных об этом нет.
#include <time.h>
char *asctime(const struct tm *timp);
#include <time.h>
char *_asctime_r(const struct tm *timp, void *reent);
Форматирует время в timp строку вида
Wed Jun 15 11:38:07 1988\n\0
Строка создается в статическом буфере; каждый вызов toasctime
перезаписывает строку, созданную при предыдущем вызове.
_asctime_r является повторно входимой версией функции asctime.
Дополнительный аргумент reent - указатель на структуру, содержащую информацию для обеспечения повторной входимости.
Возвращается yказатель на строку, содержащую отформатированное значение timestamp.
Стандарт ANSI требует наличия функции asctime.
asctime не требует никаких процедур ОС.
#include <time.h>
clock_t clock(void);
Вычисляет наилучшее возможное приближение общего процессорного
времени, прошедшего с момента запуска программы. Для преобразования
результата в секунды его нужно разделить на макро CLOCKS_PER_SEC.
Выдается общее количество процессорного времени, прошедшего с момента начала выполнения программы в единицах, определенных машинно-зависимым макро CLOCKS_PER_SEC. Если такое измерение провести нельзя, то выдается -1.
Стандарт ANSI требует наличия функции clock и макро CLOCKS_PER_SEC.
Требуется процедура ОС: times.
как строку
#include <time.h>
char *ctime(time_t timp);
Переводит величину в timp в местное время (как localtime) и
форматирует его в строку вида
Wed Jun 15 11:38:07 1988\n\0
(как asctime).
Возвращается yказатель на строку, содержащую отформатированное значение timestamp.
Стандарт ANSI требует наличия функции ctime.
ctime не требует никаких процедур ОС.
#include <time.h>
double difftime(time_t tim1, time_t tim2);
Вычитает два времени в аргументах tim1 и tim2.
Выдается pазница (в секундах) между tim2 и tim1, типа double.
Стандарт ANSI требует наличия функции difftime, и определяет, что pезyльтат должен выдаваться в секyндах во всех реализациях.
difftime не требует никаких процедур ОС.
#include <time.h>
struct tm *gmtime(const time_t *timep
gmtime полагает, что время в timep представляет собой местное
время и преобразует его в UTC (universal coordinated time -
Универсальное Всемирное время, также известное как GMT, greenwich mean
time), затем преобразовывает арифметическое представление в
традиционное представление, определяемое struct tm.
gmtime создает традиционное представление времени в статической памяти, каждый вызов gmtime или localtime переписывает это представление, созданное какой-либо из этих функций.
Возвращается указатель на традиционное представление времени (struct tm).
Стандарт ANSI требует наличия функции gmtime.
gmtime не требует никаких процедур ОС.
#include <time.h>
struct tm *localtime(time_t *timep);
localtime преобразовывает время в timep в местное время, затем
преобразовывает арифметическое представление в традиционное
представление, определяемое struct tm.
localtime создает традиционное представление времени в статической памяти, каждый вызов gmtime или localtime переписывает это представление, созданное какой-либо из этих функций.
mktime - обратная к localtime функция.
Возвращается yказатель на традиционное представление времени (struct tm).
Стандарт ANSI требует наличия функции localtime.
localtime не требует никаких процедур ОС.
#include <time.h>
time_t mktime(struct tm *timp);
mktime пердполагает, что время в timp - локальное, и
преобразовывает его представление из традиционного представления,
определенного struct tm в представление подходящее для арифметических
операций.
localtime - функция, обратная к mktime.
Если содержимое структуры в timp не является правильным представлением календарного времени, то выдается -1. В противном случае выдается время преобразованное в значение time_t.
Стандарт ANSI требует наличия функции mktime.
mktime не требует никаких процедур ОС.
#include <time.h>
size_t strftime(char *s, size_t maxsize,
const char *format, const struct tm *timp);
strftime преобразовывает представление времени типа struct tm
(в timp) в строку, начиная с s и занимая не более чем maxsize знаков.
Для управления форматированием вывода используется строка в format. *format может содержать два типа спецификаций: текст для прямого копирования в форматируемую строку и спецификации преобразования времени. Спецификации преобразования времени состоят из последовательностей из двух знаков, начинающихся с % (%% включает знак процента в вывод). Каждая определенная спецификация преобразования выбирает поле в календарного времени, записанного в *timp, и преобразовывает его в строку одним из следующих способов:
Сокращение для дня недели.
Полное имя для дня недели.
Сокращение для названия месяца.
Полное имя месяца.
Строка, представляющая полную дату и время в виде Mon Apr 01 13:13:13 1992
День месяца, представленный двумя цифрами.
Час (на 24-часовых часах), представленный двумя цифрами.
Час (на 12-часовых часах), представленный двумя цифрами.
Число дней в году, представленное тремя цифрами (от 001 до 366).
Номер месяца, представленный двумя цифрами.
Минута, представленная двумя цифрами.
am или pm.
Секунда, представленная двумя цифрами.
Номер недели, представленный двумя цифрами (от 00 до 53; первая неделя считается начавшейся в первое воскресенье года). Смотрите также %w.
День недели, представленный одной цифрой, воскресенье -нулем.
Другая версия номера недели: как %u, но считая первую неделю с первого понедельника года.
o %x Строка, полностью представляющая дату в формате Mon Apr 01 1992
Строка, представляющая полное время дня (часы, минуты и секунды) в формате 13:13:13
Последние две цифры года.
Полный год, фоpматиpованный в четыpе цифpы.
Определенно в ANSI C для выделения временного промежутка, если это возможно; в данной реализации это отсутствует (%z допускается, но по нему ничего не выводится).
Знак %.
Если отформатированное время занимает не более чем maxsize знаков, то выдается длина отформатированной строки. В противном случае, если форматирование было прекращено из-за нехватки места, то выдается 0 0 и строка, начинающаяся в s, соответствует тем частям *format, которые могут быть полностью представлены в пределе maxsize знаков.
Стандарт ANSI требует наличия функции strftime, но не определяет содержимое *s, если отформатированная строка занимает больше чем maxsize знаков.
strftime не требует никаких процедур ОС.
#include <time.h>
time_t time(time_t *t);
time находит наилучшее доступное представление текущего времени
и возвращает его, закодированное как time_t. Тоже значение сохраняется
в t, если только аргумент неравен NULL.
Возвращаемая -1 означает, что текущее время недоступно; в противном случае результат представляет текущее время.
Стандарт ANSI требует наличия функции time.
В некотоpых pеализациях тpебyется пpоцедypа ОС gettimeofday.