การแยกวันที่ออกจากสตริง

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 (ไลบรารีวันที่ของ Howard Hinnant) เป็นที่นิยม นี่คือวิธีที่คุณสามารถทำการแยกวิเคราะห์รูปแบบต่างๆ ด้วยมัน:

ใช้งานไลบรารี 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;
}

ตัวอย่างผลลัพธ์ (อาจแตกต่างไปตาม locale และการตั้งค่าวันที่ของระบบของคุณ):

วันที่ที่แยกวิเคราะห์ได้: 2023-04-15