Lompati ke konten utama
Modul 8 · Pelajaran 2 dari 430/36 dalam kursus~12 min
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 bersama
  • timedelta — durasi (selisih antara dua instan)
Python
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

Python
datetime.now()        # current date + time
date.today()          # current date only

Aritmatika dengan timedelta

Python
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.0

timedelta menerima days, seconds, microseconds, milliseconds, minutes, hours, weeks (BUKAN months atau years, yang bersifat ambigu).

Pemformatan: strftime

Mengubah datetime → string menurut suatu pola.

Python
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.

Python
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):

Python
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

Latihan#python.m8.l2.e1
Upaya: 0Memuat…

Hitung tanggal 30 hari setelah 1 Januari 2025 dan format sebagai 'YYYY-MM-DD' dalam variabel `date_str`. Evaluasi `tanggal_str`.

Memuat editor…
Tunjukkan petunjuk

base + timedelta(hari=30), lalu .strftime

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#python.m8.l2.e2
Upaya: 0Memuat…

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).

Memuat editor…
Tunjukkan petunjuk

strptime dengan pola format Italia.

Solusi tersedia setelah 3 upaya

Tantangan tambahan

Latihan#python.m8.l2.e3
Upaya: 0Memuat…

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.

Memuat editor…
Tunjukkan petunjuk

The difference between two dates returns a timedelta. Access the integer days with delta.days.

Solusi tersedia setelah 3 upaya