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