C++:
Analiza składniowa daty z łańcucha znaków
Jak to zrobić:
We współczesnym C++ można użyć biblioteki <chrono>
do obsługi dat i czasów natywnie, ale nie obsługuje ona bezpośrednio parsowania ze stringów bez ręcznego parsowania dla bardziej skomplikowanych formatów. Jednak dla formatów dat ISO 8601 i prostych niestandardowych formatów, oto jak możesz osiągnąć parsowanie.
Korzystając z <chrono>
i <sstream>
:
#include <iostream>
#include <sstream>
#include <chrono>
#include <iomanip>
int main() {
std::string date_str = "2023-04-15"; // format 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 << "Zinterpretowana data: " << parsed_date << std::endl;
} else {
std::cout << "Nie udało się zinterpretować daty." << std::endl;
}
return 0;
}
Przykładowe wyjście:
Zinterpretowana data: 2023-04-15
Dla bardziej złożonych formatów lub gdy mamy do czynienia ze starszymi wersjami C++, popularne są biblioteki stron trzecich jak date.h
(biblioteka dat Howarda Hinnanta). Oto jak możesz zinterpretować różne formaty z jej pomocą:
Korzystając z biblioteki date.h
:
Upewnij się, że masz zainstalowaną bibliotekę. Możesz ją znaleźć tutaj.
#include "date/date.h"
#include <iostream>
int main() {
std::string date_str = "Kwiecień 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 << "Zinterpretowana data: " << parsed_date << std::endl;
} else {
std::cout << "Nie udało się zinterpretować daty z ciągu znaków." << std::endl;
}
return 0;
}
Przykładowe wyjście (może się różnić w zależności od ustawień regionalnych i daty w twoim systemie):
Zinterpretowana data: 2023-04-15