Стандартная библиотека C -<time.h>

Введение

time.hЗаголовочный файл определяет четыре типа переменных, два макроса и различные функции для работы с датами и временем.

<time.h>Это заголовочный файл в стандартной библиотеке C, который предоставляет функции и типы для обработки дат и времени и работы с ними. Функции в этом заголовочном файле используются для получения текущего времени, установки времени, форматирования времени, вычисления разницы во времени и так далее.

Константы и макросы

Константы/МакросыОписание
CLOCKS_PER_SECКоличество тактовых циклов в секунду.
NULLКонстанта нулевого указателя.
TIME_UTCПредставляет время UTC (C11).

Переменные библиотеки

Ниже приведены типы переменных, определённые в заголовочном файле time.h:

Порядковый номерПеременная и описание
1size_t
Это беззнаковый целочисленный тип, который является результатомsizeofключевого слова.
2clock_t
Это тип, подходящий для хранения процессорного времени.
3time_t — это
Это тип, подходящий для хранения календарного времени.
4struct 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:

Порядковый номерМакрос & Описание
1NULL
Этот макрос является значением константы нулевого указателя.
2CLOCKS_PER_SEC
Этот макрос представляет количество процессорных тактов в секунду.

Библиотечные функции

Ниже приведены функции, определённые в заголовочном файле time.h:

Порядковый номерФункция и описание
1char *asctime(const struct tm *timeptr)
Возвращает указатель на строку, представляющую дату и время структуры timeptr.
2clock_t clock(void)
Возвращает количество процессорного времени, использованного с момента начала выполнения программы (обычно с начала программы).
3char *ctime(const time_t *timer)
Возвращает строку, представляющую местное время, на основе параметра timer.
4double difftime(time_t time1, time_t time2)
Возвращает разницу в секундах между time1 и time2 (time1-time2).
5struct tm *gmtime(const time_t *timer)
Значение timer разбивается на структуру tm и выражается во Всемирном координированном времени (UTC), также известном как среднее время по Гринвичу (GMT).
6struct tm *localtime(const time_t *timer)
Значение timer разбивается на структуру tm и выражается в местном часовом поясе.
7time_t mktime(struct tm *timeptr)
Преобразует структуру, на которую указывает timeptr, в значение time_t с учётом местного часового пояса.
8size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)
Форматирует время, представленное структурой timeptr, в соответствии с правилами форматирования, заданными в format, и сохраняет его в str.
9time_t time(time_t *timer)
Вычисляет текущее календарное время и кодирует его в формате time_t.
10int timespec_get(struct timespec *ts, int base);
Получает текущее время (C11).

Пример

Далее используется<time.h>Примеры некоторых функций в

Получить текущее время:

Пример

#include <stdio.h>
#include <time.h>

int main() {
    time_t current_time;
    time(&current_time);
    printf("Текущее время: %s", ctime(&current_time));

    return 0;
}

Форматировать время:

Пример

#include <stdio.h>
#include <time.h>

int main() {
    time_t current_time;
    struct tm *time_info;
    char buffer[80];

    time(&current_time);
    time_info = localtime(&current_time);

    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", time_info);
    printf("Форматированное время: %s\n", buffer);

    return 0;
}

Вычислить разницу времени:

Пример

#include <stdio.h>
#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 <stdio.h>
#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.

Другие расширения