Kalender dan Zona Waktu
Gunakan tipe kalender C++20
Kalender dan Zona Waktu adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Tipe Kalender C++20
C++20 menambahkan dukungan kalender yang lengkap ke <chrono>. Kini Anda dapat menyatakan tahun, bulan, dan hari secara langsung sebagai tipe, bukan mengelola bilangan bulat secara manual.
year,month,dayyear_month_dayuntuk tanggal lengkap
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
year y{2026};
std::cout << "Year value: " << static_cast<int>(y) << '\n';
return 0;
}Literal Kalender
Literal kalender seperti 2026y dan 15d, ditambah nama bulan seperti std::chrono::May, membuat tanggal terbaca secara alami.
#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;
}Membuat Tanggal
Gabungkan ketiga bagian dengan operator / untuk membentuk year_month_day. Urutannya adalah tahun, bulan, lalu hari.
#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;
}Memvalidasi Tanggal
year_month_day dapat mengetahui apakah nilainya merupakan tanggal kalender yang valid. Gunakan ok() untuk menolak nilai mustahil seperti 30 Februari.
#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
Konversikan tanggal ke sys_days, yaitu hitungan hari sejak titik awal waktu. Dengan demikian, Anda dapat melakukan aritmetika hari dan menghitung selisih antar-tanggal.
#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;
}Aritmetika Hari
Menambahkan days{n} ke sys_days akan memajukan tanggal sebanyak n hari, lalu Anda dapat mengonversinya kembali menjadi tanggal kalender.
#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;
}Hari dalam Seminggu
Konversikan sys_days ke weekday untuk menemukan hari dalam seminggu dari suatu tanggal.
#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;
}Hari Terakhir dalam Sebulan
Penanda khusus last menghitung hari terakhir dari setiap bulan dan menangani tahun kabisat secara otomatis.
#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;
}Pemeriksaan Tahun Kabisat
Tipe year menyediakan is_leap(), sehingga Anda tidak perlu mengingat sendiri aturan pembagian tahun.
#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;
}Dari Titik Waktu ke Tanggal
Bulatkan ke bawah titik waktu system_clock menjadi days, lalu konversikan ke year_month_day untuk mendapatkan tanggal kalender hari ini.
#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;
}Zona Waktu
C++20 juga menambahkan zona waktu melalui std::chrono::zoned_time dan basis data IANA. Ketersediaannya bergantung pada pustaka standar Anda, tetapi model ini membungkus titik waktu dengan zona bernama agar waktu lokal ditampilkan secara tepat.
#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;
}Uji Cepat
Uji pemahaman Anda tentang tipe kalender C++20.
Rangkuman
Anda telah mempelajari dukungan kalender C++20:
year,month,day, danyear_month_daydengan pembentuk/- validasi
ok()dan pemeriksaanis_leap() sys_daysuntuk aritmetika hari dan pencarian hari dalam seminggulastuntuk akhir bulan, serta pengenalan terhadapzoned_time
Dengan demikian, kursus Waktu dan Pustaka Chrono ini selesai.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Kalender dan Zona Waktu” gratis?
Ya — teks lengkap “Kalender dan Zona Waktu” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Kalender dan Zona Waktu”?
Gunakan tipe kalender C++20 Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Kalender dan Zona Waktu” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Durasi dan Jam
- Titik Waktu
- Mengukur Performa Kode
- Kalender dan Zona Waktu