Дата и время

Стандартная библиотека C++ не обеспечивает надлежащий тип даты. C++ наследует и функции и структуры для манипуляции датой и временем из Cи. Чтобы получить доступ к дате и времени, и связанных с ними функциями и структурами, вам потребуется включить файл заголовка #include <ctime>

Подробнее: ctime - C++ Reference

Есть четыре типа, связанных со временем: clock_t, time_t, size_t и tm Типы clock_t, size_t и time_t способны представлять системное время и дату и являются в некотором роде целочисленными типами.

Си-структура tm - содержит следующие поля:

struct tm {
   int tm_sec;   // секунды минуты от 0 до 61*
   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;  // день года начиная с 1-го января 0-365
   int tm_isdst; // Флаг перехода на летнее время
}

*как правило 0-59. Дополнительные секунды для размещения високосных секунд в некоторых системах


Доступны следующие ф-ции:

time_t time(time_t *time); возвращает текущее календарное время системы как число секунд, прошедших с 1 января 1970 года Если система не имеет времени, возвращает -1

char *ctime(const time_t *time); конвертирует time_t * в строку. Возвращает указатель на строку вида: Www Mmm dd hh:mm:ss yyyy

auto mytime = time(nullptr);
cout << ctime(&mytime); // Tue Jan 10 00:57:33 2017

char * asctime ( const struct tm * time ); конвертирует указатель tm * в строку. Возвращает указатель на строку вида: Www Mmm dd hh:mm:ss yyyy

auto mytime = time(nullptr);
tm * lctime = localtime(&mytime);
string dt = asctime(lctime);
cout << "The local date and time is: " 
     << dt << endl; // Mon Jan  9 23:11:41 2017

У microsoft есть безопасные версии:

tm timeStruct;
char buffer[32] = { 0 };
time_t regDate = time(nullptr);

localtime_s(&timeStruct, &regDate);
asctime_s(buffer, 32, &timeStruct);

cout << "The local date and time is: " 
     << buffer << endl; // Mon Jan  9 23:11:41 2017

time_t mktime(struct tm * time); конвертит tm * в time_t. Если календарное время не может быть представлено, возвращается значение -1

struct tm *localtime(const time_t *time); возвращает указатель на структуру tm, представляющую локальное время.

setlocale(LC_TIME, "ru-RU.utf8");
auto mytime = time(nullptr);
tm * lctime   = localtime(&mytime);

cout << "Year: " << 1900 + lctime->tm_year << "\n"
       << "Month: " << lctime->tm_mon << "\n"
       << "Date: " << lctime->tm_mday << "\n";

clock_t clock(void); Кол-во процессорного времени в тактах. Возвращаемое значение выражается в тактах, которые являются единицами времени постоянной, но специфичной для системы длины (с отношением CLOCKS_PER_SEC тиков в секунду).

struct tm * gmtime(const time_t *time); Это возвращает указатель на время в виде структуры tm. Время отображается в формате универсального всемирного времени (UTC), который является по существу (GMT).

double difftime ( time_t time2, time_t time1 ); вычисляет разницу в секундах между time1 и time2.

size_t strftime(char* buffer, size_t maxsize, const char* format, const struct tm* timeptr); форматирует время представленное структурой tm* в формат определенный строкой format и помещает все это в buffer размером maxsize. Если длина результирующей строки C, включая завершающий нулевой символ, не превышает maxsize, функция возвращает общее число символов, скопированных в buffer (не включая завершающий нулевой символ). В противном случае она возвращает ноль, а содержимое массива buffer - является неопределенным.

time_t rawtime;
struct tm * timeinfo;
char buffer [80];

time (&rawtime);
timeinfo = localtime (&rawtime);

strftime (buffer, 80, "Now it's %I:%M%p.", timeinfo);
cout << buffer;