Розбір дати з рядка

C++:
Розбір дати з рядка

Як:

У сучасному C++ ви можете використовувати бібліотеку <chrono> для роботи з датами та часом нативно, але вона безпосередньо не підтримує розбір з рядків без ручного аналізу для більш складних форматів. Однак, для форматів дат ISO 8601 та простих налаштовуваних форматів, ось як ви можете досягнути розбору.

Використовуючи <chrono> та <sstream>:

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

int main() {
    std::string date_str = "2023-04-15"; // Формат ISO 8601
    std::istringstream iss(date_str);
    
    std::chrono::year_month_day parsed_date;
    iss >> std::chrono::parse("%F", parsed_date);
    
    if (!iss.fail()) {
        std::cout << "Розібрана дата: " << parsed_date << std::endl;
    } else {
        std::cout << "Не вдалося розібрати дату." << std::endl;
    }
    
    return 0;
}

Приклад виводу:

Розібрана дата: 2023-04-15

Для більш складних форматів або коли працюєте зі старими версіями C++, популярними є сторонні бібліотеки, такі як date.h (бібліотека дати Говарда Гіннанта). Ось як ви можете розібрати різні формати з її допомогою:

Використовуючи бібліотеку date.h: Переконайтеся, що у вас встановлена бібліотека. Знайти її можна тут.

#include "date/date.h"
#include <iostream>

int main() {
    std::string date_str = "April 15, 2023";
    
    std::istringstream iss(date_str);
    date::sys_days parsed_date;
    iss >> date::parse("%B %d, %Y", parsed_date);
    
    if (!iss.fail()) {
        std::cout << "Розібрана дата: " << parsed_date << std::endl;
    } else {
        std::cout << "Не вдалося розібрати дату з рядка." << std::endl;
    }

    return 0;
}

Приклад виводу (може варіюватися в залежності від локалі вашої системи та налаштувань дати):

Розібрана дата: 2023-04-15