C++ Academy · บทเรียน

ปฏิทินและเขตเวลา

ใช้ชนิดปฏิทินของ C++20

บทเรียน 4 จาก 413 ขั้นตอน

ปฏิทินและเขตเวลา เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

ชนิดข้อมูลปฏิทินของ C++20

C++20 เพิ่มการรองรับ ปฏิทินอย่างเต็มรูปแบบให้กับ <chrono> ขณะนี้คุณสามารถแสดงปี เดือน และวันเป็นชนิดข้อมูลได้โดยตรง แทนการจัดการกับจำนวนเต็มหลายค่า

  • year, month, day
  • year_month_day สำหรับวันที่ครบถ้วน
#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    year y{2026};
    std::cout << "Year value: " << static_cast<int>(y) << '\n';
    return 0;
}

ค่าตามตัวอักษรของปฏิทิน

ค่าตามตัวอักษรของปฏิทิน เช่น 2026y และ 15d รวมถึงชื่อเดือนอย่าง std::chrono::May ทำให้การเขียนวันที่ดูเป็นธรรมชาติ

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto y = 2026y;
    auto d = 15d;
    std::cout << static_cast<int>(y) << " / " << static_cast<unsigned>(d) << '\n';
    return 0;
}

การสร้างวันที่

รวมองค์ประกอบทั้งสามด้วยตัวดำเนินการ / เพื่อสร้าง year_month_day ลำดับจะเป็นปี เดือน และวัน

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    year_month_day ymd = 2026y/May/30;
    std::cout << static_cast<int>(ymd.year()) << "-"
              << static_cast<unsigned>(ymd.month()) << "-"
              << static_cast<unsigned>(ymd.day()) << '\n';
    return 0;
}

การตรวจสอบวันที่

year_month_day ทราบได้ว่าวันที่นั้นเป็นวันที่จริงตามปฏิทินหรือไม่ ใช้ ok() เพื่อปฏิเสธค่าที่เป็นไปไม่ได้ เช่น วันที่ 30 กุมภาพันธ์

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    year_month_day good = 2026y/February/28;
    year_month_day bad = 2026y/February/30;
    std::cout << std::boolalpha << good.ok() << " " << bad.ok() << '\n';
    return 0;
}

sys_days

แปลงวันที่เป็น sys_days ซึ่งเป็นจำนวนวันนับตั้งแต่จุดเริ่มต้นของยุคเวลา วิธีนี้ช่วยให้คุณคำนวณเกี่ยวกับวันและหาความแตกต่างระหว่างวันที่ได้

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    sys_days a = sys_days{2026y/May/30};
    sys_days b = sys_days{2026y/May/20};
    std::cout << "Days apart: " << (a - b).count() << '\n';
    return 0;
}

การคำนวณเกี่ยวกับวัน

การบวก days{n} เข้ากับ sys_days จะเลื่อนไปข้างหน้า n วัน จากนั้นคุณจึงแปลงกลับเป็นวันที่ตามปฏิทินได้

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    sys_days start = sys_days{2026y/May/30};
    sys_days later = start + days{10};
    year_month_day ymd = later;
    std::cout << static_cast<unsigned>(ymd.day()) << "/"
              << static_cast<unsigned>(ymd.month()) << '\n';
    return 0;
}

วันในสัปดาห์

แปลง sys_days เป็น weekday เพื่อดูว่าวันที่นั้นตรงกับวันใดในสัปดาห์

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    weekday wd{sys_days{2026y/May/30}};
    std::cout << "Weekday index (Sun=0): " << wd.c_encoding() << '\n';
    return 0;
}

วันสุดท้ายของเดือน

แท็กพิเศษ last จะคำนวณวันสุดท้ายของเดือนได้ทุกเดือน โดยจัดการกับปีอธิกสุรทินให้โดยอัตโนมัติ

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    year_month_day_last eom = 2024y/February/last;
    year_month_day ymd = eom;
    std::cout << "Feb 2024 ends on day " << static_cast<unsigned>(ymd.day()) << '\n';
    return 0;
}

การตรวจสอบปีอธิกสุรทิน

ชนิดข้อมูล year มี is_leap() ให้ใช้ คุณจึงไม่ต้องจำกฎการหารลงตัวด้วยตนเอง

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    std::cout << std::boolalpha;
    std::cout << "2024 leap: " << year{2024}.is_leap() << '\n';
    std::cout << "2026 leap: " << year{2026}.is_leap() << '\n';
    return 0;
}

จากจุดเวลาเป็นวันที่

ปัดจุดเวลาของ system_clock ลงเป็น days แล้วแปลงเป็น year_month_day เพื่อรับวันที่ตามปฏิทินของวันนี้

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto today = floor<days>(system_clock::now());
    year_month_day ymd = sys_days{today};
    std::cout << "Year is in range: " << (static_cast<int>(ymd.year()) > 2000) << '\n';
    return 0;
}

เขตเวลา

C++20 ยังเพิ่มการรองรับเขตเวลาผ่าน std::chrono::zoned_time และฐานข้อมูล IANA ความพร้อมใช้งานขึ้นอยู่กับไลบรารีมาตรฐานของคุณ แต่รูปแบบนี้จะห่อจุดเวลาไว้ด้วยเขตเวลาที่มีชื่อ เพื่อแสดงเวลาท้องถิ่นได้อย่างถูกต้อง

#include <iostream>
#include <chrono>

int main() {
    using namespace std::chrono;
    auto now = system_clock::now();
    auto days_part = floor<days>(now);
    std::cout << "Have a UTC time point: " << (days_part.time_since_epoch().count() > 0) << '\n';
    return 0;
}

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเกี่ยวกับชนิดข้อมูลปฏิทินของ C++20

สรุปทบทวน

คุณได้เรียนรู้เกี่ยวกับการรองรับปฏิทินของ C++20:

  • year, month, day และ year_month_day ที่สร้างด้วยตัวดำเนินการ /
  • การตรวจสอบด้วย ok() และการตรวจสอบปีอธิกสุรทินด้วย is_leap()
  • sys_days สำหรับการคำนวณเกี่ยวกับวันและการค้นหาวันในสัปดาห์
  • last สำหรับวันสิ้นเดือน พร้อมการแนะนำ zoned_time

เท่านี้ก็จบหลักสูตรเวลาและไลบรารีโครโน

เริ่มต้นได้ฟรี

เรียนรู้ C++ ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
51
บทเรียน
203

คำถามที่พบบ่อย

บทเรียน “ปฏิทินและเขตเวลา” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ปฏิทินและเขตเวลา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ปฏิทินและเขตเวลา”

ใช้ชนิดปฏิทินของ C++20 คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ปฏิทินและเขตเวลา” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ช่วงเวลาและนาฬิกา
  2. จุดเวลา
  3. การวัดประสิทธิภาพโค้ด
  4. ปฏิทินและเขตเวลา
← กลับไปที่ C++ Academy