Hampir setiap aplikasi bertemu dengan waktu: tenggat pembayaran, durasi peminjaman, jadwal rapat lintas negara. Standard library Python menempatkan solusinya di module datetime dan zoneinfo. Chapter ini berfungsi sebagai peta module — tur singkat, tabel kelas, dan contoh konversi zona waktu — karena pembahasan mendalam tentang format, parsing, hingga timezone-aware sudah dibahas tuntas pada Section Dates, Times, dan Localization.
Tur Singkat: date dan timedelta #
Kelas date menyimpan tanggal kalender tanpa jam, sedangkan timedelta menyimpan durasi. Keduanya mendukung aritmetika langsung:
from datetime import date, timedelta
liburan = date(2025, 6, 15)
seminggu = timedelta(days=7)
print(liburan + seminggu)
print((date(2025, 6, 22) - liburan).days)Output yang Dihasilkan:
2025-06-22
7Baris liburan + seminggu menghasilkan objek date baru 2025-06-22 — objek lama tidak berubah karena keduanya immutable. Sebaliknya, mengurangi dua objek date menghasilkan timedelta; atribut .days-nya memberi selisih hari dalam bentuk integer. Pembahasan lengkap pola ini ada pada Chapter Datetime dan Timedelta.
Kelas datetime untuk Tanggal dan Jam #
Kelas datetime menggabungkan tanggal dan jam, dan pengurangan dua objek datetime menghasilkan durasi yang presisi:
from datetime import datetime
peminjaman = datetime(2025, 6, 15, 9, 30, 0)
pengembalian = datetime(2025, 6, 20, 14, 45, 0)
durasi = pengembalian - peminjaman
print(durasi)
print(durasi.total_seconds() / 3600)Output yang Dihasilkan:
5 days, 5:15:00
125.25Objek timedelta mencetak dirinya sebagai 5 days, 5:15:00, dan method total_seconds() mengubah seluruh durasi menjadi jumlah detik — dibagi 3600 untuk mendapatkan jam desimal 125.25, format yang sering dibutuhkan sistem penagihan. Komponen datetime juga bisa dibaca satu per satu sebagai atribut: peminjaman.year mengembalikan 2025, peminjaman.hour mengembalikan 9, dan peminjaman.weekday() mengembalikan indeks hari dalam seminggu mulai dari 0 untuk Senin.
zoneinfo: Konversi Zona Waktu #
Module zoneinfo (hadir di Python 3.9) menyediakan database zona waktu IANA berisi nama seperti "Asia/Jakarta". Satu baris astimezone() cukup untuk mengonversi waktu rapat ke zona tujuan:
from datetime import datetime
from zoneinfo import ZoneInfo
rapat = datetime(2025, 6, 15, 9, 0, tzinfo=ZoneInfo("Asia/Jakarta"))
print(rapat.isoformat())
print(rapat.astimezone(ZoneInfo("Asia/Tokyo")))Output yang Dihasilkan:
2025-06-15T09:00:00+07:00
2025-06-15 11:00:00+09:00Method isoformat() menampilkan offset +07:00 sebagai bukti objek ini timezone-aware. Konversi ke Asia/Tokyo menggeser jam menjadi 11:00 dengan offset +09:00 — pergeseran dua jam yang benar. Kapan menggunakan timezone dibanding zoneinfo, serta jebakan naive vs aware datetime, dibahas tuntas pada Chapter Timezone-Aware datetime dan zoneinfo.
Peta Module #
Enam nama inilah yang perlu kita kenali di module datetime beserta zoneinfo:
| Kelas | Tugas | Contoh nilai |
|---|---|---|
date | Tanggal kalender tanpa jam | 2025-06-15 |
time | Jam tanpa tanggal (opsional berzona) | 09:30:00 |
datetime | Tanggal + jam | 2025-06-15 09:30:00 |
timedelta | Durasi selisih waktu | 5 days, 5:15:00 |
timezone | Zona fixed offset dari UTC | UTC+07:00 |
zoneinfo.ZoneInfo | Zona waktu IANA dengan aturan historis | Asia/Jakarta |
Pembagian perannya sederhana: date dan time untuk komponen mandiri, datetime untuk momen, timedelta untuk durasi, timezone untuk offset tetap seperti UTC, dan ZoneInfo untuk zona berdasarkan geografi yang mengikuti peraturan pemerintah setempat.
Peta ini cukup untuk membaca dan menulis kode yang menyentuh tanggal. Saat aplikasi Anda mulai memformat tanggal ke teks, mem-parsing input pengguna, atau menangani daylight saving time, lanjutkan ke Section Dates, Times, dan Localization di mana setiap topik tersebut mendapat Chapter sendiri.