Belajar dengan membaca secara berurutan

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 timedatetime / 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.

Bagaimana date / datetime / timedelta Berhubungan
datetahun / bulan / haridatetimetahun / bulan / hari + waktutimedeltadurasi (selisih / offset)
date dan datetime merepresentasikan titik waktu; timedelta merepresentasikan selisih di antaranya atau jumlah yang ditambahkan.
ClassApa yang disimpanPenggunaan tipikal
datetahun / bulan / hariTanggal lahir, tanggal pesanan — apa pun yang hanya butuh tanggal
datetimetahun / bulan / hari + jam / menit / detikLog, waktu modifikasi file — apa pun yang juga butuh waktu
timedeltahari / detik / mikrodetik"3 hari dari sekarang", "elapsed time" — durasi
timejam / menit / detik (tanpa tanggal)Hanya time-of-day, mis. "jam kerja 9:00 sampai 18:00"
Melakukan Aritmetika Tanggal dengan Library datetime
date(2024, 3, 15)buat+ timedelta(days=3)date(2024, 3, 18)hasil+ timedelta= tanggal baru
date + timedelta memberimu tanggal baru. Selisih 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.

Hitung tanggal kirim (3 hari kemudian) dan tanggal jatuh tempo bayar (14 hari kemudian) dari tanggal pesanan 2024-03-15.

① Impor date dan timedelta dari datetime, lalu bangun tanggal pesanan date(2024, 3, 15).

② Hitung tanggal kirim = tanggal pesanan + timedelta(days=3) dan jatuh tempo bayar = tanggal pesanan + timedelta(days=14).

③ Cetak keduanya sebagai Ship date: ... dan Pay due: ....

Python Editor

Jalankan kode untuk melihat output

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.

Hitung berapa hari memisahkan tanggal kirim dan jatuh tempo bayar dari Latihan 1.

① Buat ulang tanggal pesanan, tanggal kirim, dan jatuh tempo bayar yang sama seperti di Latihan 1.

② Hitung pay_due - ship_date untuk mendapat timedelta, lalu baca atribut .days.

③ Cetak jumlah hari sebagai Interval: ... days.

Python Editor

Jalankan kode untuk melihat output

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.

Simetri strftime dan strptime
objekdatetimestring'2024-03-15'kode format seperti %Y-%m-%dobjekdatetimestring'2024-03-15'strftime (format)strptime (parse)
strftime menulis datetime keluar memakai format string; strptime membaca string kembali masuk dengan format yang sama. f untuk format, p untuk parse. Kode format (%Y, %m, %d, dll.) dibagi di antara keduanya.
Kode formatArtiContoh
%YTahun 4 digit2024
%mBulan 2 digit (01-12)03
%dHari 2 digit (01-31)15
%HJam 2 digit format 24-jam (00-23)14
%MMenit 2 digit (00-59)30
%SDetik 2 digit (00-59)00
%ANama hari (English)Friday
%wNomor 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.

Konversi string log timestamp "2024-03-15 14:30:45" menjadi objek datetime, lalu reformat berbeda.

① Impor class datetime dari modul datetime.

② Simpan string timestamp di atas dalam variabel.

Parse string menjadi objek datetime (kode format mencerminkan layout input). Lalu cetak Type: datetime memakai type(value).__name__.

④ Tarik tahun, bulan, dan hari dari datetime sebagai atribut (d.year / d.month / d.day) dan cetak sebagai Year: ... Month: ... Day: ....

⑤ Format datetime yang sama menjadi tahun/bulan/hari jam:menit (lepas detik). Cetak tipe nilai yang sudah diformat sebagai Formatted type: str dengan type(formatted).__name__, lalu cetak nilainya sebagai Formatted: ... (mengonfirmasi datetime → str).

Python Editor

Jalankan kode untuk melihat output

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.

Kapan Pakai time.time vs time.perf_counter
time.time()Unix timestamp (detik)time.perf_counter()monotonic counterlog timestampsaat waktu absolut pentingexecution timingsaat waktu relatif cukup
time.time mengembalikan detik sejak 1970-01-01 00:00 UTC (Unix timestamp). time.perf_counter adalah monotonic counter presisi tinggi dengan zero yang tidak ditentukan — sempurna untuk mengukur elapsed time.
FungsiMengembalikanUse 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 / FalseCek 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.

Gabungkan pengukuran elapsed time dengan info bulan.

① Impor time dan calendar.

② Mulai stopwatch (pakai counter presisi tinggi untuk elapsed time).

③ Jumlahkan integer dari 0 sampai 49999.

④ Hitung elapsed time dan cetak Total: ... dan Elapsed >= 0 seconds: True (waktu nyata bervariasi menurut lingkungan, jadi kita hanya konfirmasi non-negatif).

⑤ Cetak hari terakhir Februari 2024 sebagai Feb end: ... days dan cek tahun kabisat sebagai Leap year: True / False.

Python Editor

Jalankan kode untuk melihat output

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.

Hentikan eksekusi dengan `time.sleep` dan cek apakah elapsed time setidaknya 0.3 detik. Waktu nyata sedikit goyang menurut lingkungan, jadi kita memverifikasinya sebagai boolean — apakah setidaknya 0.3 detik?

① Impor time.

② Catat waktu mulai dengan time.perf_counter().

③ Tunggu 0.3 detik dengan time.sleep(0.3).

④ Hitung elapsed time sebagai time.perf_counter() - start_time dan cetak Elapsed >= 0.2 seconds: True / False memakai >= 0.2.

(Jika kamu menjalankannya dengan benar, penjelasan muncul di bawah.)

Python Editor

Jalankan kode untuk melihat output
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Kombinasi mana yang menghitung "3 hari dari sekarang"?

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?