Soal 1Kombinasi mana yang menghitung "3 hari dari sekarang"?
datetime dan time — Bekerja dengan Tanggal, Waktu, dan Elapsed Time
Pelajari modul datetime / time / calendar Python dari dasar. Mencakup aritmetika tanggal dengan date / datetime / timedelta, konversi string lewat strftime / strptime, dan pengukuran elapsed time dengan time.perf_counter — semuanya praktik langsung.
Artikel ini menelusuri tiga standard library yang menangani tanggal, waktu, dan elapsed time — datetime / time / calendar. Kamu akan melihat aritmetika tanggal dengan date / datetime / timedelta, konversi string dua arah dengan strftime / strptime, dan pengukuran elapsed time dengan time.perf_counter.
date / datetime / timedelta — Membuat Tanggal dan Menghitung Selisih
Saat kamu bekerja dengan tanggal di Python, kamu memilih dari tiga class di modul datetime. date menyimpan hanya tahun/bulan/hari, datetime menambahkan jam/menit/detik, dan timedelta merepresentasikan durasi seperti "3 hari" atau "2 jam". Desainnya simetris: date + timedelta memberimu "3 hari dari sekarang", dan date - date mengembalikan selisih antara dua tanggal sebagai timedelta.
| Class | Apa yang disimpan | Penggunaan tipikal |
|---|---|---|
| date | tahun / bulan / hari | Tanggal lahir, tanggal pesanan — apa pun yang hanya butuh tanggal |
| datetime | tahun / bulan / hari + jam / menit / detik | Log, waktu modifikasi file — apa pun yang juga butuh waktu |
| timedelta | hari / detik / mikrodetik | "3 hari dari sekarang", "elapsed time" — durasi |
| time | jam / menit / detik (tanpa tanggal) | Hanya time-of-day, mis. "jam kerja 9:00 sampai 18:00" |
date2 - date1 mengembalikan timedelta.from datetime import date, datetime, timedelta
# Buat tanggal
order_date = date(2024, 3, 15)
print(order_date) # 2024-03-15
# Tiga hari kemudian
delivery = order_date + timedelta(days=3)
print(delivery) # 2024-03-18
# Selisih antara dua tanggal adalah timedelta
elapsed = delivery - order_date
print(elapsed.days) # 3
# Waktu saat ini
now = datetime.now()
print(now.year, now.month, now.day)
datetime.now dan Ketergantungan Lingkungan
datetime.now() mengembalikan waktu saat ini dari mesin yang menjalankan kode, jadi nilainya berubah setiap kali run entah kamu di runtime Pyodide browser atau mesin nyata. Latihan praktik memakai date(2024, 3, 15) tetap untuk menjaga reproducibility — coba now() terpisah di konsol untuk melihat perilakunya.
Menghitung Selisih Antara Dua Tanggal
Mengurangkan satu tanggal dari yang lain mengembalikan objek timedelta. Atribut .days memberimu hanya jumlah hari, jadi pertanyaan seperti "berapa hari sampai X?" punya jawaban integer yang rapi.
strftime / strptime — Konversi Antara Tanggal dan String
Tanggal di dalam file, log, atau JSON hampir selalu datang sebagai string. Di Python, strftime (format time) mengubah datetime → string, dan strptime (parse time) mengubah string → datetime. Keduanya mengambil kode format yang memetakan simbol ke arti — %Y adalah tahun 4 digit, %m adalah bulan 2 digit, dan seterusnya.
f untuk format, p untuk parse. Kode format (%Y, %m, %d, dll.) dibagi di antara keduanya.| Kode format | Arti | Contoh |
|---|---|---|
| %Y | Tahun 4 digit | 2024 |
| %m | Bulan 2 digit (01-12) | 03 |
| %d | Hari 2 digit (01-31) | 15 |
| %H | Jam 2 digit format 24-jam (00-23) | 14 |
| %M | Menit 2 digit (00-59) | 30 |
| %S | Detik 2 digit (00-59) | 00 |
| %A | Nama hari (English) | Friday |
| %w | Nomor hari (0=Minggu, 6=Sabtu) | 5 |
from datetime import datetime
# string -> datetime
text = "2024-03-15 14:30:00"
dt = datetime.strptime(text, "%Y-%m-%d %H:%M:%S")
print(dt.year, dt.month, dt.day) # 2024 3 15
# datetime -> string
dt2 = datetime(2024, 3, 15, 14, 30)
print(dt2.strftime("%Y/%m/%d")) # 2024/03/15
print(dt2.strftime("%Y-%m-%d %H:%M")) # 2024-03-15 14:30
Mismatch Format Memunculkan ValueError
Jika separator di stringmu tidak cocok dengan kode format — misalnya strptime("2024/03/15", "%Y-%m-%d") — kamu mendapat ValueError. Lihat format sebenarnya dari data inputmu dan luruskan tanda hubung dengan tanda hubung, slash dengan slash. Untuk string gaya ISO seperti "2024-03-15T14:30:00" yang mencampur tanda hubung dengan T dan titik dua, datetime.fromisoformat(text) lebih mudah.
time dan calendar — Mengukur Elapsed Time dan Memeriksa Bulan
Modul time terpisah dari datetime dan mengekspos API waktu tingkat lebih rendah. Yang paling sering kamu pakai adalah time.perf_counter(), counter resolusi tinggi yang mengembalikan elapsed time saat ini dalam detik (sebagai float). Panggil dua kali — sebelum dan sesudah — dan selisihnya adalah waktu eksekusimu. Modul calendar menarik informasi kalender seperti berapa hari satu bulan punya atau hari apa tanggal pertama bulan itu.
| Fungsi | Mengembalikan | Use case |
|---|---|---|
| time.time() | Unix timestamp (float) | Timestamp waktu saat ini |
| time.perf_counter() | monotonic counter (float, detik) | Mengukur waktu eksekusi |
| calendar.monthrange(y, m) | tuple (hari pertama bulan, hari terakhir) | Informasi kalender bulan |
| calendar.isleap(y) | True / False | Cek tahun kabisat |
import time
import calendar
# Mengukur waktu eksekusi
start = time.perf_counter()
total = sum(range(100000))
elapsed = time.perf_counter() - start
print("Total:", total)
print("Type:", type(elapsed).__name__) # float
# Info kalender
weekday, last_day = calendar.monthrange(2024, 2) # (hari pertama bulan, hari terakhir)
print("Last day of Feb 2024:", last_day)
print("Leap year:", calendar.isleap(2024))
Mengapa Pakai perf_counter Alih-alih time.time
time.time() mengembalikan Unix timestamp (detik dengan pecahan), tapi jika jam mesin disesuaikan mundur oleh NTP, selisihnya bisa jadi negatif. time.perf_counter() dijamin monotonic (selalu meningkat) dan dirancang khusus untuk pengukuran elapsed time, jadi untuk timing gaya stopwatch ia pilihan yang tepat setiap saat.
time.sleep — Berhenti Selama Interval Tertentu
`time.sleep(seconds)` adalah fungsi yang menghentikan eksekusi selama jumlah detik yang diberikan. Muncul di mana-mana — interval retry, rate limiting, timing animasi. Argumennya float, jadi kamu bisa melewatkan pecahan seperti time.sleep(0.5). Karena latihan ini berjalan di browser, jaga sleep pendek (0–1 detik) untuk memverifikasi perilaku.
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Format string mana yang mengonversi string "2024/03/15" menjadi datetime?
Soal 3Mana yang terbaik untuk mengukur waktu eksekusi?
Soal 4Cara paling sederhana mengubah string ISO 8601 "2024-03-15T14:30:00" menjadi datetime?