Дата и время в C ++
Стандартная библиотека C ++ не предоставляет правильный тип даты. C ++ наследует структуры и функции для управления датой и временем от C. Чтобы получить доступ к функциям и структурам, связанным с датой и временем, вам необходимо включить файл заголовка <ctime> в вашу программу на C ++.
Есть четыре типа, связанных со временем: clock_t, time_t, size_t, и tm. Типы - clock_t, size_t и time_t могут представлять системное время и дату как своего рода целое число.
Тип структуры tm содержит дату и время в виде структуры C, имеющей следующие элементы:
struct tm {
   int tm_sec;   // seconds of minutes from 0 to 61
   int tm_min;   // minutes of hour from 0 to 59
   int tm_hour;  // hours of day from 0 to 24
   int tm_mday;  // day of month from 1 to 31
   int tm_mon;   // month of year from 0 to 11
   int tm_year;  // year since 1900
   int tm_wday;  // days since sunday
   int tm_yday;  // days since January 1st
   int tm_isdst; // hours of daylight savings time
}Ниже приведены важные функции, которые мы используем при работе с датой и временем в C или C ++. Все эти функции являются частью стандартной библиотеки C и C ++, и вы можете проверить их детали, используя ссылку на стандартную библиотеку C ++, приведенную ниже.
| Старший Нет | Функция и цель | 
|---|---|
| 1 | time_t time(time_t *time); Это возвращает текущее календарное время системы в секундах, прошедшее с 1 января 1970 года. Если в системе нет времени, возвращается .1. | 
| 2 | char *ctime(const time_t *time); Это возвращает указатель на строку вида день месяц год часы: минуты: секунды год \ n \ 0 . | 
| 3 | struct tm *localtime(const time_t *time); Это возвращает указатель на tm структура, представляющая местное время. | 
| 4 | clock_t clock(void); Это возвращает значение, которое приблизительно соответствует количеству времени, в течение которого выполнялась вызывающая программа. Если время недоступно, возвращается .1. | 
| 5 | char * asctime ( const struct tm * time ); Это возвращает указатель на строку, содержащую информацию, хранящуюся в структуре, на которую указывает время, преобразованное в форму: день месяц дата часы: минуты: секунды год \ n \ 0 | 
| 6 | struct tm *gmtime(const time_t *time); Это возвращает указатель на время в виде структуры tm. Время представлено в формате всемирного координированного времени (UTC), которое по сути является средним временем по Гринвичу (GMT). | 
| 7 | time_t mktime(struct tm *time); Это возвращает календарный эквивалент времени, найденного в структуре, на которую указывает time. | 
| 8 | double difftime ( time_t time2, time_t time1 ); Эта функция вычисляет разницу в секундах между time1 и time2. | 
| 9 | size_t strftime(); Эта функция может использоваться для форматирования даты и времени в определенном формате. | 
Текущая дата и время
Предположим, вы хотите получить текущую системную дату и время либо как местное время, либо как всемирное координированное время (UTC). Ниже приведен пример достижения того же -
#include <iostream>
#include <ctime>
using namespace std;
int main() {
   // current date/time based on current system
   time_t now = time(0);
   
   // convert now to string form
   char* dt = ctime(&now);
   cout << "The local date and time is: " << dt << endl;
   // convert now to tm struct for UTC
   tm *gmtm = gmtime(&now);
   dt = asctime(gmtm);
   cout << "The UTC date and time is:"<< dt << endl;
}Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
The local date and time is: Sat Jan  8 20:07:41 2011
The UTC date and time is:Sun Jan  9 03:07:41 2011Форматирование времени с помощью struct tm
В tmструктура очень важна при работе с датой и временем в C или C ++. Эта структура содержит дату и время в форме структуры C, как упоминалось выше. В большинстве функций, связанных со временем, используется структура tm. Ниже приведен пример, в котором используются различные функции, связанные с датой и временем, и структура tm.
Используя структуру в этой главе, я предполагаю, что вы имеете базовое представление о структуре C и о том, как получить доступ к членам структуры с помощью оператора стрелка ->.
#include <iostream>
#include <ctime>
using namespace std;
int main() {
   // current date/time based on current system
   time_t now = time(0);
   cout << "Number of sec since January 1,1970 is:: " << now << endl;
   tm *ltm = localtime(&now);
   // print various components of tm structure.
   cout << "Year:" << 1900 + ltm->tm_year<<endl;
   cout << "Month: "<< 1 + ltm->tm_mon<< endl;
   cout << "Day: "<< ltm->tm_mday << endl;
   cout << "Time: "<< 5+ltm->tm_hour << ":";
   cout << 30+ltm->tm_min << ":";
   cout << ltm->tm_sec << endl;
}Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Number of sec since January 1,1970 is:: 1588485717
Year:2020
Month: 5
Day: 3
Time: 11:31:57