ปฏิทินและเขตเวลา
ใช้ชนิดปฏิทินของ C++20
ปฏิทินและเขตเวลา เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
ชนิดข้อมูลปฏิทินของ C++20
C++20 เพิ่มการรองรับ ปฏิทินอย่างเต็มรูปแบบให้กับ <chrono> ขณะนี้คุณสามารถแสดงปี เดือน และวันเป็นชนิดข้อมูลได้โดยตรง แทนการจัดการกับจำนวนเต็มหลายค่า
year,month,dayyear_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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ช่วงเวลาและนาฬิกา
- จุดเวลา
- การวัดประสิทธิภาพโค้ด
- ปฏิทินและเขตเวลา