C++でISO 8601形式の日時をSystemTimeに変換する方法


方法1: C++11以降の標準ライブラリを使用する方法

#include <iostream>
#include <chrono>
#include <iomanip>
int main() {
    std::string iso8601DateTime = "2024-02-02T12:34:56Z";
    std::tm timeinfo = {};
    std::istringstream iss(iso8601DateTime);
    iss >> std::get_time(&timeinfo, "%Y-%m-%dT%H:%M:%SZ");
    std::time_t timestamp = std::mktime(&timeinfo);
    std::chrono::system_clock::time_point systemTime = std::chrono::system_clock::from_time_t(timestamp);
    std::time_t systemTime_t = std::chrono::system_clock::to_time_t(systemTime);
    std::cout << "SystemTime: " << std::put_time(std::localtime(&systemTime_t), "%Y-%m-%d %H:%M:%S") << std::endl;
    return 0;
}

方法2: Boostライブラリを使用する方法(Boostが必要です)

#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
int main() {
    std::string iso8601DateTime = "2024-02-02T12:34:56Z";
    boost::posix_time::ptime systemTime = boost::posix_time::from_iso_string(iso8601DateTime);
    std::cout << "SystemTime: " << systemTime << std::endl;
    return 0;
}

上記のコード例では、ISO 8601形式の日時文字列をパースして、C++のstd::tmオブジェクトやBoostのboost::posix_time::ptimeオブジェクトに変換しています。それぞれの方法は異なるライブラリを使用していますが、必要に応じて適切な方法を選択してください。