timercmp(struct timeval *t0, struct timeval *t1, operator)
Данный макрос позволяет сравнивать две структуры timeval
в одном временном интервале. Он вычисляется в логический эквивалент t0 операция t1
, если t0
и t1
относятся к арифметическим типам. Обратите внимание на то, что макрос timercmp()
не работает для операций <=
и >=
. Вместо этого нужно применять формы !timercmp(t1, t2, >)
и !timercmp(t1, t2, <)
.
timeradd(struct timeval *t0, struct timeval *t1, struct timeval *result)
Добавляет t0
к t1
и размещает сумму в переменной result
.
timersub(struct timeval *t0, struct timeval *t1, struct timeval *result)
Вычитает t1
из t0
и передает разность в переменную result
.
Третье представление времени struct tm
дает время в исчислении, более привычном для человека.
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
long int tm_gmtoff;
const char *tm_zone;
};
Первые девять элементов являются стандартными, последние два — нестандартные, однако очень полезные (они существуют в системах Linux).
tm_sec |
Количество прошедших секунд в минуте. Принимает значения от 0 до 61 (две дополнительные секунды выделяются для учета лишних секунд, относящихся к високосному году). |
tm_min |
Количество прошедших минут в часе. Принимает значения от 0 до 59. |
tm_hour |
Количество прошедших часов в сутках. Принимает значения от 0 до 23. |
tm_mday |
Номер дня месяца. Принимает значения от 1 до 31. Это единственный элемент, который не может равняться нулю. |
tm_mon |
Количество прошедших месяцев в году. Принимает значения от 0 до 11. |
tm_year |
Количество прошедших лет (считая с 1900 года). |
tm_wday |
Количество прошедших дней в неделе (считая от воскресенья). Принимает значения от 0 до 6. |
tm_yday |
Количество прошедших дней в году. Принимает значения от 0 до 365. |
tm_isdst |
Определяет, поддерживается ли летнее время в текущем часовом поясе, tm_isdst принимает положительное значение, если время переведено на летнее, 0 — если не переведено, 1 — если система не может это определить. |
tm_gmtoff |
Параметр не является переносимым, поскольку он используется не во всех системах. Если он существует, то он может также называться __tm_gmtoff . Данная переменная указывает число секунд к востоку от UTC или отрицательное число секунд к западу от UTC для часовых поясов к востоку от линии перемены дат. |
tm_zone |
Параметр не является переносимым, поскольку он используется не во всех системах. Если он существует, то он может также называться __tm_zone . Он содержит название текущего часового пояса (некоторые часовые пояса могут иметь несколько имен). |
В завершение, стандарт POSIX.1b обработки данных в режиме реального времени поддерживает даже большую разрешающую способность, чем доступные в стандарте struct timeval
микросекунды. В структуре struct timespec
используются наносекунды, а также выделено больше пространства для размещения чисел.
struct timespec {
long int tv_sec; /* секунды */
long int tv_nsec; /* наносекунды */
};
18.1.2. Преобразование, форматирование и разбор значений времени
Для взаимно-обратных преобразований времени, выраженного в показателях time_t
, и времени, выраженного в показателях struct tm
, используются четыре функции. Три из них являются стандартными и доступны во всех системах Linux и Unix. Четвертая, не менее полезная, может применяться не всегда, поскольку она работает только в современных системах Linux. Пятая функция (стандартная) вычисляет разность в секундах между значениями времени time_t
. (Обратите внимание на то, что даже аргументы time_t
передаются как указатели, а не как только аргументы struct tm
.)
struct tm * gmtime(const time_t *t)
Сокращенная форма времени по Гринвичу; функция gmtime()
преобразует значение time_t
в struct tm
, которое выражает данное время в UTC.
struct tm * localtime(const time_t *t)
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, которая выглядит примерно так: