Pelajaran modul (2/4)
datetime: tanggal dan waktu
Modul datetime menyediakan kelas untuk mewakili tanggal dan waktu.
Tiga kelas utama
date— hanya tanggal (tahun, bulan, hari)time— waktu saja (jam, menit, detik, mikrodetik)datetime— tanggal + waktu bersamatimedelta— durasi (selisih antara dua instan)
from datetime import date, time, datetime, timedelta
date(2025, 1, 1) # datetime.date(2025, 1, 1)
time(14, 30, 0) # datetime.time(14, 30)
datetime(2025, 1, 1, 14, 30, 0) # datetime.datetime(2025, 1, 1, 14, 30)"Sekarang": now dan today
datetime.now() # current date + time
date.today() # current date onlyAritmatika dengan timedelta
from datetime import datetime, timedelta
ora = datetime(2025, 1, 1, 12, 0)
domani = ora + timedelta(days=1)
una_ora_fa = ora - timedelta(hours=1)
# difference between two datetimes -> timedelta
delta = domani - ora
delta.days # 1
delta.total_seconds() # 86400.0timedelta menerima days, seconds, microseconds, milliseconds,
minutes, hours, weeks (BUKAN months atau years, yang bersifat ambigu).
Pemformatan: strftime
Mengubah datetime → string menurut suatu pola.
ora = datetime(2025, 1, 1, 14, 30)
ora.strftime("%Y-%m-%d") # '2025-01-01'
ora.strftime("%d/%m/%Y %H:%M") # '01/01/2025 14:30'
ora.strftime("%A %d %B %Y") # 'Wednesday 01 January 2025' (locale-dependent)Perintah yang paling sering digunakan: %Y 4 digit tahun, %m 2 digit bulan, %d 2 digit hari,
%H 24 jam, %M menit, %S detik.
Penguraian: strptime
Kebalikannya: string → datetime, mengingat pola yang diharapkan.
datetime.strptime("01/01/2025", "%d/%m/%Y")
# datetime.datetime(2025, 1, 1, 0, 0)ISO 8601
Untuk pertukaran data selalu pilih format ISO 8601 (YYYY-MM-DDTHH:MM:SS):
ora.isoformat() # '2025-01-01T14:30:00'
datetime.fromisoformat("2025-01-01T14:30:00")Zona waktu dan waktu sadar
Secara default, objek datetime dengan Python bersifat naif (artinya objek tersebut tidak berisi info zona waktu). Untuk aplikasi dunia nyata, praktik terbaiknya adalah membuat mereka sadar dengan menyetel info zona waktu melalui datetime.timezone.utc atau memanfaatkan modul zoneinfo.
Cobalah
Hitung tanggal 30 hari setelah 1 Januari 2025 dan format sebagai 'YYYY-MM-DD' dalam variabel `date_str`. Evaluasi `tanggal_str`.
Tunjukkan petunjuk
base + timedelta(hari=30), lalu .strftime
Solusi tersedia setelah 3 upaya
Tinjau latihan
Diberikan string `s = '15/03/2025'`, parsing dengan strptime ke dalam variabel `d` (objek datetime). Evaluasi bilangan bulat hari dalam seminggu `d.weekday()` (0=Senin, 6=Minggu).
Tunjukkan petunjuk
strptime dengan pola format Italia.
Solusi tersedia setelah 3 upaya
Tantangan tambahan
Import `date` from the `datetime` module. Calculate the difference in days between December 25, 2026 (`date(2026, 12, 25)`) and December 20, 2026 (`date(2026, 12, 20)`). Store the integer number of days (using the `.days` attribute of the delta) in `days_diff`. Finally, evaluate the variable.
Tunjukkan petunjuk
The difference between two dates returns a timedelta. Access the integer days with delta.days.
Solusi tersedia setelah 3 upaya