В этой статье мы обсудим управление датой и временем в C++. C++ наследует функции и структуры даты и времени от языка C.
Чтобы управлять датой и временем, нам нужно включить заголовок <ctime> в нашу программу на C++.
Структура «tm»
Заголовок <ctime> имеет четыре типа, связанных со временем: tm, clock_t, time_t и size_t.
Каждый из типов, clock_t, size_t и time_t, представляет системное время и дату в виде целого числа. Структура tm содержит дату и время в форме структуры C.
Структура «tm» определяется следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 |
struct tm { int tm_sec; // секунды в минуте от 0 до 61 int tm_min; // минуты в часе от 0 до 59 int tm_hour; // часы в сутках от 0 до 24 int tm_mday; // дней в месяце от 1 до 31 int tm_mon; // месяцев в годе от 0 до 11 int tm_year; // год с 1900 года int tm_wday; // дни с воскресенья int tm_yday; // дни с 1 января int tm_isdst; // часы перехода на летнее время } |
Функции даты и времени
Имя функции | Прототип функции | Описание |
---|---|---|
ctime | char *ctime(const time_t *time); | Возвращает указатель на строку в формате день недели месяц дата часы минуты секунды год. |
gmtime | struct tm *gmtime(const time_t *time); | Возвращает указатель на структуру tm в формате всемирного координированного времени (UTC), который по сути представляет собой среднее время по Гринвичу (GMT). |
localtime | struct tm*localtime(const time_t *time); | Возвращает указатель на структуру tm, представляющую местное время. |
strftime | size_t strftime(); | Используется для форматирования даты и времени в определенном формате. |
asctime | char * asctime ( const struct tm * time ); | Преобразует объект времени типа tm в строку и возвращает указатель на эту строку. |
time | time_t time(time_t *time); | Возвращает текущее время. |
clock | clock_t clock(void); | Возвращает приблизительное значение времени работы вызывающей программы. Значение .1 возвращается, если время недоступно. |
difftime | double difftime ( time_t time2, time_t time1 ); | Возвращает разницу между двумя объектами времени time1 и time2. |
mktime | time_t mktime(struct tm *time); | Преобразует структуру tm в формат time_t или календарный эквивалент. |
Примеры программирования
Следующий пример кода вычисляет текущее время в местном формате и формате GMT и отображает его:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <ctime> using namespace std; int main( ) { time_t ttime = time(0); char* dt = ctime(&ttime); cout << "The current local date and time is: " << dt << endl; tm *gmt_time = gmtime(&ttime); dt = asctime(gmt_time); cout << "The current UTC date and time is:"<< dt << endl; } |
Вывод данных:
1 2 3 |
The current local date and time is: Fri Jun 22 03:51:20 2022 The current UTC date and time is: Fri Jun 22 03:51:20 2022 |
В приведенном выше примере текущее время извлекается с помощью функции времени, а затем преобразуется в строковый формат для отображения. Точно так же он извлекает GMT с помощью функции gmtime и преобразует его в строковый формат с помощью функции «asctime». Позже он отображает время по Гринвичу для пользователя.
В следующем примере будут показаны различные элементы структуры «tm».
Пример кода показан ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> #include <ctime> using namespace std; int main( ) { time_t ttime = time(0); cout << "Number of seconds elapsed since January 1, 1990:" << ttime << endl; tm *local_time = localtime(&ttime); cout << "Year: "<< 1900 + local_time->tm_year << endl; cout << "Month: "<< 1 + local_time->tm_mon<< endl; cout << "Day: "<< local_time->tm_mday << endl; cout << "Time: "<< 1 + local_time->tm_hour << ":"; cout << 1 + local_time->tm_min << ":"; cout << 1 + local_time->tm_sec << endl; } |
Вывод данных:
1 2 3 4 5 |
Number of seconds elapsed since January 1, 1990:1553227670 Year: 2022 Month: 6 Day: 22 Time: 4:8:51 |
Как показано в выводе данных выше, мы получили местное время, а затем отобразили год, месяц, день и время в форме «час:минуты:секунды».
Итог
На этом наша статья по функциям даты и времени в C++ подошла к концу. Хотя это небольшая тема, она имеет большое значение для наших знаний в C++.
В нашей следующей статье вы узнаете об основных операциях ввода-вывода в C++.
С Уважением, МониторБанк