НАЙКРАЩИЙ САЙТ ДЛЯ ВЕБ-РОЗРОБНИКІВ

C++ Підручник

C++ Головна C++ Інтро C++ Початок роботи C++ Синтаксис C++ Виведення C++ Коментарі C++ Змінні C++ Введення користувача C++ Типи даних C++ Оператори C++ Рядки C++ Математика C++ Булеві C++ Умови C++ Switch C++ Цикл While C++ Цикл For C++ Break/Continue C++ Масиви C++ Структури C++ Enums C++ Довідники C++ Вказівники

C++ Функції

C++ Функції C++ Параметри функції C++ Перевантаження функцій C++ Область застосування C++ Рекурсія

C++ Класи

C++ ООП C++ Класи/Об’єкти C++ Методи класу C++ Конструктори C++ Специфікатори доступу C++ Інкапсуляція C++ Успадкування C++ Поліморфізм C++ Файли C++ Винятки C++ Дата

C++ Як зробити

Скласти два числа Випадкові числа

C++ Довідник

C++ Довідник C++ Ключові слова C++ <iostream> C++ <fstream> C++ <cmath> C++ <string> C++ <cstring> C++ <ctime>

C++ Приклади

C++ Приклади C++ Компілятор C++ Вправи C++ Вікторина C++ Сертифікат

Мова програмування C++. Уроки W3Schools для початківців українською мовою

En Es De Fr

C++ Дата і час


Дата і час (Date та Time)

Бібліотека <ctime> дозволяє нам працювати з датами та часом.

Щоб використовувати його, потрібно імпортувати файл заголовка <ctime>:

Приклад

#include <ctime> // Імпорт ctime бібліотеки

Відображення поточної дати та часу

Бібліотека <ctime> має різноманітні функції для вимірювання дат і часу.

Функція time() дає нам мітку часу (timestamp), що представляє поточну дату й час. Ми можемо використати функцію ctime(), щоб показати дату й час, які представляє мітка часу (timestamp):

Приклад

Відображення поточної дати:

// Отримайте позначку часу для поточної дати та часу
time_t timestamp;
time(&timestamp);

// Відображати дату й час, представлені міткою часу
cout << ctime(&timestamp);
Спробуйте самі »

Два способи використання функції time()

Функція time() записує мітку часу в місце пам’яті, задане параметром, але також повертає значення мітки часу.

Альтернативним способом використання функції time() є передача вказівника NULL і використання замість нього значення, що повертається.

time_t timestamp = time(NULL);

Типи даних

Для зберігання дати та часу використовуються два типи даних: time_t для міток часу і struct tm для структур дати й часу.

Мітки часу представляють момент часу одним числом, що полегшує обчислення комп’ютера.

Структури дати й часу — це структури, які представляють різні компоненти дати й часу як члени. Це полегшує нам визначення дат. Структури Datetime мають такі члени:

  • tm_sec – секунди протягом хвилини
  • tm_min – хвилини протягом години
  • tm_hour – година протягом доби (від 0 до 23)
  • tm_mday – день місяця
  • tm_mon – місяць (від 0 до 11, починаючи з січня)
  • tm_year – кількість років з 1900 року
  • tm_wday – день тижня (з 0 до 6, починаючи з неділі)
  • tm_yday – день року (від 0 до 365, де 0 означає 1 січня)
  • tm_isdst – позитивний, коли діє літній час, нульовий, коли не діє, і негативний, коли невідомий

Завжди пам’ятайте про спосіб представлення компонентів дати:

  • Години представлено у 24-годинному форматі. 23:00 буде представлено як 23.
  • Місяці йдуть від 0 до 11. Наприклад, грудень буде представлено як 11, а не як 12.
  • Роки представлено відносно 1900 року. 2024 рік буде представлено як 124, оскільки з 1900 року минуло 124 роки.

Створення міток (позначок) часу

Функція time() може створити мітку часу лише для поточної дати, але ми можемо створити мітку часу для будь-якої дати за допомогою функції mktime().

Функція mktime() перетворює структуру datetime на позначку часу.

Приклад

Створіть позначку часу за допомогою функції mktime():

struct tm datetime;
time_t timestamp;

datetime.tm_year = 2023 - 1900; // Кількість років з 1900 року
datetime.tm_mon = 12 - 1; // Кількість місяців з січня
datetime.tm_mday = 17;
datetime.tm_hour = 12;
datetime.tm_min = 30;
datetime.tm_sec = 1;
// Потрібно вказати літній час
// -1 використовує налаштування часового поясу комп’ютера
datetime.tm_isdst = -1;

timestamp = mktime(&datetime);

cout << ctime(&timestamp);
Спробуйте самі »

Примітка: Для функції mktime() ці члени повинні мати значення: tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec та tm_isdst.


Створення структур Datetime

Функція mktime() також заповнює tm_wday і tm_yday члени структури datetime із правильними значеннями, що завершує структуру та дає дійсну дату й час. Його можна використовувати, наприклад, щоб знайти день тижня певної дати:

Приклад

Знайдіть день тижня вказаної дати:

// Create the datetime structure and use mktime to fill in the missing members
struct tm datetime;
datetime.tm_year = 2023 - 1900; // Кількість років з 1900 року
datetime.tm_mon = 12 - 1; // Кількість місяців з січня
datetime.tm_mday = 17;
datetime.tm_hour = 0; datetime.tm_min = 0; datetime.tm_sec = 0;
datetime.tm_isdst = -1;
mktime(&datetime);

string weekdays[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

cout << "Дата вказана на " << weekdays[datetime.tm_wday];
Спробуйте самі »

Функції localtime() і gmtime() можуть перетворювати мітки часу на структури дати й часу.

Функція localtime() повертає покажчик на структуру, яка представляє час у часовому поясі комп’ютера.

Функція gmtime() повертає покажчик на структуру, яка представляє час у часовому поясі GMT.

Ці функції повертають покажчик на структуру дати й часу. Якщо ми хочемо переконатися, що його значення не зміниться неочікувано, ми повинні зробити його копію, розіменувавши покажчик. Щоб дізнатися про розіменування, перегляньте розділ C++ Розіменування.

Приклад

Отримайте структуру дати й часу та виведіть поточну годину:

time_t timestamp = time(&timestamp);
struct tm datetime = *localtime(&timestamp);

cout << datetime.tm_hour;
Спробуйте самі »

Відобразити дати

Поки що ми використовували функцію ctime() для відображення дати, що міститься в мітці часу. Щоб відобразити дати зі структури datetime, ми можемо використати функцію asctime().

Приклад

Відобразити дату, представлену структурою datetime:

time_t timestamp = time(NULL);
struct tm datetime = *localtime(&timestamp);

cout << asctime(&datetime);
Спробуйте самі »

Примітка: Функція asctime() не виправляє недійсні дати. Наприклад, якщо ви встановите день місяця на 32, він відображатиме 32. Функція mktime() може виправити такі помилки:

Приклад

Виправте дату перед її відображенням:

// Створіть структуру datetime і використовуйте mktime для виправлення помилок
struct tm datetime;
datetime.tm_year = 2022 - 1900; // Кількість років з 1900 року
datetime.tm_mon = 0; // 0 є січень
datetime.tm_mday = 32;
datetime.tm_hour = 0; datetime.tm_min = 0; datetime.tm_sec = 0;
datetime.tm_isdst = -1;
mktime(&datetime);

cout << asctime(&datetime);
Спробуйте самі »

Функції ctime() і asctime() дозволяють відображати дату, але не дозволяють вибрати спосіб її відображення.

Щоб вибрати спосіб відображення дати, можна скористатися функцією strftime().

Приклад

Представляйте поточну дату різними способами:

time_t timestamp = time(NULL);
struct tm datetime = *localtime(&timestamp);

char output[50];

strftime(output, 50, "%B %e, %Y", &datetime);
cout << output << "\n";

strftime(output, 50, "%I:%M:%S %p", &datetime);
cout << output << "\n";

strftime(output, 50, "%m/%d/%y", &datetime);
cout << output << "\n";

strftime(output, 50, "%a %b %e %H:%M:%S %Y", &datetime);
cout << output << "\n";
Спробуйте самі »

Функція strftime() форматує дату та записує її як рядок у стилі C у масив char. Він має чотири параметри:

  1. Перший параметр вказує на масив символів, де буде записана відформатована дата.
  2. Другий параметр визначає доступний простір у масиві.
  3. Третій параметр дозволяє нам вибрати спосіб форматування дати за допомогою специфікаторів формату.
  4. Останній параметр — це покажчик на структуру datetime, яка містить дату, яку ми хочемо відобразити.

У наступній таблиці є деякі корисні специфікатори формату. Щоб отримати повний список, подивіться на сторінку Довідник strftime().

Специфікатор формату Опис Приклад
%a Коротке зображення дня тижня Fri
%b Коротке представлення назви місяця Dec
%B Повне представлення назви місяця December
%d День місяця з нулем на початку 09
%e День місяця з пробілами на початку  9
%H 24-годинний формат годин 14
%I 12-годинний формат годин 02
%M Хвилин протягом години 30
%p AM або PM PM
%S Секунди протягом хвилини 01
%y 2-значне представлення року 23
%Y 4-значне представлення року 2023

Вимірювання часу

Існує дві різні функції, які можна використовувати для вимірювання різниць у часі.

Функція difftime() вимірює кількість секунд, що пройшли між двома різними мітками часу. Це корисно під час вимірювання різниці в часі між датами.

Приклад

Виміряйте різницю в часі між двома часовими мітками

time_t now;
time_t nextyear;
struct tm datetime;

now = time(NULL);
datetime = *localtime(&now);
datetime.tm_year = datetime.tm_year + 1;
datetime.tm_mon = 0;
datetime.tm_mday = 1;
datetime.tm_hour = 0; datetime.tm_min = 0; datetime.tm_sec = 0;
datetime.is_dst = -1;
nextyear = mktime(&datetime);

int diff = difftime(nextyear, now);

cout << diff << " секунд до наступного року";
Спробуйте самі »

Функція clock() корисна для вимірювання коротких інтервалів часу під час роботи програми. Це точніше, ніж функція difftime().

Кожен виклик функції годинника повертає особливий вид позначки часу, виміряної в годинниках (одиниця часу, що залежить від того, як реалізовано бібліотеку), яка має тип даних clock_t. Щоб виміряти різницю в часі, збережіть мітку часу в два різні моменти часу, а потім відніміть їх. Різниця в часі вимірюється годинниками, але ви можете перетворити її в секунди, поділивши її на константу CLOCKS_PER_SEC.

Приклад

Виміряйте, скільки часу потрібно для виконання програми:

clock_t before = clock();
int k = 0;
for(int i = 0; i < 100000; i++) {
k += i;
}
clock_t duration = clock() - before;
cout << "Duration: " << (float)duration / CLOCKS_PER_SEC << " seconds";
Спробуйте самі »

Примітка. Переконайтеся, що перед поділом значення приведено до типу float або double, інакше це може призвести до цілочисельного ділення, яке призведе до відсікання десяткової частини.


Повний довідник <ctime>

Повну довідку про функції <ctime> дивіться в розділі C++ Довідник ctime.



Коментарі