Преобразование даты в строку

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 для месяца и так далее.

Смотрите также