Перетворення дати в рядок

C++:
Перетворення дати в рядок

Як це зробити:

У сучасному C++ бібліотеки <chrono> та <iomanip> є вашими помічниками для операцій з датою та часом. Ось швидкий метод за допомогою std::put_time:

#include <iostream>
#include <iomanip>
#include <chrono>
#include <sstream>

int main() {
    auto now = std::chrono::system_clock::now(); // Отримати поточний час
    auto time = std::chrono::system_clock::to_time_t(now); // Перетворити в time_t
    
    // Перетворити в структуру tm для форматування
    std::tm tm = *std::localtime(&time);

    // Рядковий потік для виводу
    std::stringstream ss;

    ss << std::put_time(&tm, "%Y-%m-%d %H:%M:%S"); // Формат: РРРР-ММ-ДД ГГ:ХХ:СС

    std::string date_str = ss.str(); // Перетворити в рядок

    std::cout << date_str << std::endl; // Вивести рядок дати
    return 0;
}

Приклад виводу (залежить від поточної дати та часу):

2023-03-15 14:25:30

Поглиблений Розгляд

Перед появою <chrono>, програмісти C++ часто мали справу з обробкою часу в стилі C через <ctime>. Це було менш інтуїтивно зрозуміло і більш схильно до помилок через ручне управління пам’яттю та залежності від платформи.

Альтернативи до std::put_time включають використання strftime, але це більш у стилі C. Сторонні бібліотеки, як-от Boost.Date_Time, можуть запропонувати більше функціоналу за ціною додавання залежностей.

Ключовий момент реалізації - розуміння специфікаторів формату в std::put_time, які схожі на ті, що використовуються в strftime. Ви відображаєте заповнювачі на компоненти дати або часу - %Y для повного року, %m для місяця і так далі.

Дивіться також