Синтаксис
intgettimeofday( структуравремя*город, структурачасовой пояс*tz)В gettimeofday () функция определена в sys / time.h заголовочный файл.
Аргументы
Эта функция принимает два аргумента:
1уларгумент указывает на время состав. В время структура объявлена как показано ниже в sys / time.h заголовочный файл:
структуравремя{
time_t tv_sec; // используется в течение секунд
suseconds_t tv_usec; // используется для микросекунд
}
Структура struct timeval представляет собой календарное время. Он состоит из двух членов:
- tv_sec : Это количество секунд с начала эпохи.
- tv_usec : Это дополнительные микросекунды после вычисления количества секунд с эпохи. .
2ndаргумент указывает на часовой пояс состав. Обычно он должен быть установлен в NULL, потому что структура часового пояса устарело. Этот аргумент предназначен только для обратной совместимости.
Возвращаемые значения
В случае успеха gettimeofday () вернуть 0, в случае неудачи функция возвращает -1.
Просто найдите время и распечатайте
#включают#включают
intглавный() {
структураtimeval current_time;
gettimeofday(&Текущее время,НУЛЕВОЙ);
printf ('секунд:% ld пмикросекунды:% ld ',
Текущее время.tv_sec,Текущее время.tv_usec);
возвращение 0;
}
Выход:
Здесь, sys / time.h был включен для gettimeofday () функция и временная структура. В gettimeofday () функция устанавливает время в члене структуры timeval (current_time). tv_sec - это целое число секунд, прошедших с начала Эпоха UNIX , в полночь по всемирному координированному времени 1 января 1970 года, а tv_usec - дополнительное количество микросекунд, прошедшее с tv_sec. Если вы запустите программу, вы должны увидеть результат. Каждый раз, когда вы запускаете программу, вывод будет изменяться.
Ошибка аргумента NULL
#включают#включают
intглавный() {
структураtimeval current_time;
gettimeofday(НУЛЕВОЙ,НУЛЕВОЙ);
возвращение 0;
}
Выход:
В этом примере показан первый аргумент gettimeofday () функция не должна быть ПУСТО (NULL). Предупреждение компиляции появится, если первый аргумент - ПУСТО (NULL).
Пример форматирования текущего времени
#включают#включают
#включают
intглавный() {
структураTimeval тв;
time_t t;
структуратм*Информация;
charбуфер[64];
gettimeofday(&телевидение,НУЛЕВОЙ);
тзнак равнотелевидение.tv_sec;
Информациязнак равно местное время (&т);
printf ('% s', asctime (Информация));
strftime (буфер, размербуфер, 'Сегодня% A,% B% d. п',Информация);
printf ('% s',буфер);
strftime (буфер, размербуфер, 'Время% I:% M% p. п',Информация);
printf ('% s',буфер);
возвращение 0;
}
Выход:
В этом примере показано, как напечатать дату и время в другом формате. Непросто представить даты из возвращаемого значения gettimeofday () функция. Здесь, местное время() а также strftime () функции используются для красивого представления возвращаемого значения gettimeofday () .
В местное время() функция принимает аргумент, который является ссылкой на указатель tv_sec поле struct timeval и возвращает ссылку на указатель struct tm объект.
В strftime () функция сгенерирует персонализированную отформатированную строку, показывающую дату и время из struct tm указатель. Спецификаторы формата используются для форматированного отображения. Например, строка формата% d-% m-% Y% H:% M:% S указывает дату и время в следующей форме:
14.04.2020 13:09:42Ниже приведены спецификаторы преобразования, которые могут использоваться для форматированного отображения:
Спецификатор | Имея в виду |
%к | Сокращенное название дня недели в соответствии с текущим языковым стандартом. |
%К | Название дня недели в соответствии с текущим языковым стандартом. |
% b | Название сокращенного месяца в соответствии с текущим языковым стандартом. |
% B | Название полного месяца в соответствии с текущим языковым стандартом. |
% c | Предпочтительное представление даты и времени для текущего языкового стандарта. |
% d | В виде десятичного числа числа месяца (диапазон 01–31). |
%ЧАС | Использование 24-часового диапазона (от 00 до 23) до часа как десятичного числа. |
%Я | Использование 12-часового диапазона (от 00 до 23) до часа как десятичного числа. |
% j | В виде десятичного числа для дня года (от 001 до 366). |
% m | В виде десятичного числа для месяца (диапазон 01–12). |
% M | Десятичное число минут. |
%п | В зависимости от указанного значения времени, «am» или «pm» или эквивалентных строк для текущего языкового стандарта. |
% S | Десятичное число секунды. |
% Икс | Предпочтительное представление даты для текущего языкового стандарта, но без времени. |
% ИКС | Предпочтительное представление времени для текущего языкового стандарта, но без даты. |
%а также | Год является десятичным, но не веком (диапазон от 00 до 99). |
%А ТАКЖЕ | Год является десятичным, включая век. |
%С УЧАСТИЕМ | Часовой пояс. |
Использование gettimeofday для измерения времени выполнения программы
#включают#включают
intглавный() {
структураначало отсчета времени,конец;
gettimeofday(&Начните,НУЛЕВОЙ);
для (intязнак равно 0;я<1e5 ;я++) {
}
gettimeofday(&конец,НУЛЕВОЙ);
printf ('Время, необходимое для подсчета до 10 ^ 5, составляет:% ld микросекунд п',
((конец.tv_sec * 1000000 +конец.tv_usec) -
(Начните.tv_sec * 1000000 +Начните.tv_usec)));
возвращение 0;
}
Выход:
Этот пример показывает, как gettimeofday () Функция может использоваться для расчета времени выполнения программы.
Заключение
Таким образом, gettimeofday () функция может использоваться в Linux. Для переноса существующего кода gettimeofday () функцию можно использовать, но в новом коде ее использовать не следует. clock_gettime () функция может использоваться вместо gettimeofday () .