Стандартная библиотека C -<time.h>
Введение
time.hЗаголовочный файл определяет четыре типа переменных, два макроса и различные функции для работы с датами и временем.
<time.h>Это заголовочный файл в стандартной библиотеке C, который предоставляет функции и типы для обработки дат и времени и работы с ними. Функции в этом заголовочном файле используются для получения текущего времени, установки времени, форматирования времени, вычисления разницы во времени и так далее.
Константы и макросы
| Константы/Макросы | Описание |
|---|---|
CLOCKS_PER_SEC | Количество тактовых циклов в секунду. |
NULL | Константа нулевого указателя. |
TIME_UTC | Представляет время UTC (C11). |
Переменные библиотеки
Ниже приведены типы переменных, определённые в заголовочном файле time.h:
| Порядковый номер | Переменная и описание |
|---|---|
| 1 | size_t Это беззнаковый целочисленный тип, который является результатомsizeofключевого слова. |
| 2 | clock_t Это тип, подходящий для хранения процессорного времени. |
| 3 | time_t — это Это тип, подходящий для хранения календарного времени. |
| 4 | struct tm Это структура, используемая для хранения времени и даты. |
Структура 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 到 6 */
int tm_yday; /* 一年中的第几天,范围从 0 到 365 */
int tm_isdst; /* 夏令时 */
};
Библиотечные макросы
Ниже приведены макросы, определённые в заголовочном файле time.h:
| Порядковый номер | Макрос & Описание |
|---|---|
| 1 | NULL Этот макрос является значением константы нулевого указателя. |
| 2 | CLOCKS_PER_SEC Этот макрос представляет количество процессорных тактов в секунду. |
Библиотечные функции
Ниже приведены функции, определённые в заголовочном файле time.h:
| Порядковый номер | Функция и описание |
|---|---|
| 1 | char *asctime(const struct tm *timeptr) Возвращает указатель на строку, представляющую дату и время структуры timeptr. |
| 2 | clock_t clock(void) Возвращает количество процессорного времени, использованного с момента начала выполнения программы (обычно с начала программы). |
| 3 | char *ctime(const time_t *timer) Возвращает строку, представляющую местное время, на основе параметра timer. |
| 4 | double difftime(time_t time1, time_t time2) Возвращает разницу в секундах между time1 и time2 (time1-time2). |
| 5 | struct tm *gmtime(const time_t *timer) Значение timer разбивается на структуру tm и выражается во Всемирном координированном времени (UTC), также известном как среднее время по Гринвичу (GMT). |
| 6 | struct tm *localtime(const time_t *timer) Значение timer разбивается на структуру tm и выражается в местном часовом поясе. |
| 7 | time_t mktime(struct tm *timeptr) Преобразует структуру, на которую указывает timeptr, в значение time_t с учётом местного часового пояса. |
| 8 | size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr) Форматирует время, представленное структурой timeptr, в соответствии с правилами форматирования, заданными в format, и сохраняет его в str. |
| 9 | time_t time(time_t *timer) Вычисляет текущее календарное время и кодирует его в формате time_t. |
| 10 | int timespec_get(struct timespec *ts, int base); Получает текущее время (C11). |
Пример
Далее используется<time.h>Примеры некоторых функций в
Получить текущее время:
Пример
#include <time.h>
int main() {
time_t current_time;
time(¤t_time);
printf("Текущее время: %s", ctime(¤t_time));
return 0;
}
Форматировать время:
Пример
#include <time.h>
int main() {
time_t current_time;
struct tm *time_info;
char buffer[80];
time(¤t_time);
time_info = localtime(¤t_time);
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", time_info);
printf("Форматированное время: %s\n", buffer);
return 0;
}
Вычислить разницу времени:
Пример
#include <time.h>
int main() {
time_t start_time, end_time;
double time_diff;
time(&start_time);
// Имитация длительной операции
for (int i = 0; i < 100000000; i++);
time(&end_time);
time_diff = difftime(end_time, start_time);
printf("Разница во времени: %.2f секунд\n", time_diff);
return 0;
}
Использованиеstruct tm:
Пример
#include <time.h>
int main() {
struct tm time_info;
char buffer[80];
time_info.tm_year = 2024 - 1900; // Год отсчитывается от 1900
time_info.tm_mon = 5; // Июнь, диапазон от 0 до 11
time_info.tm_mday = 12;
time_info.tm_hour = 12;
time_info.tm_min = 0;
time_info.tm_sec = 0;
time_info.tm_isdst = -1; // Автоматически определяет, является ли время летним
mktime(&time_info);
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &time_info);
printf("Пользовательское время: %s\n", buffer);
return 0;
}
Примечания
- Использование
localtimeиgmtimeКогда возвращаемый указатель указывает наstruct tmСтруктура хранится статически, и каждый вызов перезаписывает предыдущее содержимое. - Использование
mktimeПри использовании функции необходимо убедитьсяstruct tmРазличные поля в нём допустимы. - Использование
strftimeПри выполнении форматирования времени убедитесь, что буфер назначения достаточно велик, чтобы избежать переполнения буфера.
Понимая и используя<time.h>Предоставленные функции делают удобной работу с датами и временем, позволяя писать более функциональные и эффективные программы на C.