pythondatetimeMenengah5 mnt baca

Datetime di Python

Atur tanggal dan waktu dengan datetime: parsing string tanggal, hitung selisih dengan timedelta, dan format output yang rapi.

Analogi singkat: kalender plus stopwatch

Modul datetime itu seperti punya kalender dan stopwatch dalam satu kotak perkakas. date mencatat tanggal (tahun, bulan, hari), datetime mencatat tanggal plus jam, dan timedelta mengukur jarak antara dua waktu, misalnya "3 hari 2 jam". Tiga alat ini menutup hampir semua kebutuhan tanggal di analisis data.

Kenapa konsep ini ada?

Data nyata penuh tanggal: tanggal transaksi, tanggal lahir pelanggan, timestamp log. Menyimpannya sebagai string ("08-10-2026") memang gampang dibaca manusia, tapi susah dihitung: berapa hari antara dua tanggal? Urutkan dari yang terlama bagaimana? Objek datetime menyimpan tanggal sebagai data terstruktur yang bisa dikurangi, dibandingkan, dan diformat ulang sesukamu.

Membuat dan memakai tanggal

python
from datetime import date, datetime, timedelta

# tanggal hari ini
hari_ini = date.today()
print(hari_ini)  # 2026-10-08 (format bisa beda di komputermu)

# tanggal spesifik
lahir = date(2008, 5, 17)
print(lahir.year, lahir.month, lahir.day)  # 2008 5 17

# tanggal + jam
sekarang = datetime.now()
print(sekarang.hour, sekarang.minute)

# selisih waktu dengan timedelta
tiga_hari_lalu = hari_ini - timedelta(days=3)
print(tiga_hari_lalu)

# bandingkan tanggal seperti angka biasa
print(lahir < hari_ini)  # True

Parsing: string menjadi tanggal

Data dari CSV atau API datang sebagai string. strptime mengubahnya jadi objek tanggal:

python
from datetime import datetime

# pola: %d=tanggal, %m=bulan, %Y=tahun (4 digit)
tgl = datetime.strptime("08-10-2026", "%d-%m-%Y")
print(tgl)  # 2026-10-08 00:00:00

# dengan jam: %H jam, %M menit
waktu = datetime.strptime("2026-10-08 14:30", "%Y-%m-%d %H:%M")
print(waktu.hour)  # 14

Catatan teknis: Pola format itu peka huruf besar/kecil: %m bulan angka, %M menit, %Y tahun 4 digit, %y tahun 2 digit. Salah satu huruf saja, parsing gagal dengan ValueError.

Format: tanggal menjadi string cantik

Kebalikannya memakai strftime (f = format):

python
from datetime import datetime

sekarang = datetime(2026, 10, 8, 14, 30)

print(sekarang.strftime("%d/%m/%Y"))        # 08/10/2026
print(sekarang.strftime("%A, %d %B %Y"))    # Thursday, 08 October 2026
print(sekarang.strftime("%H:%M"))           # 14:30
print(sekarang.strftime("%Y%m%d_%H%M%S"))   # 20261008_143000 (bagus untuk nama file)

Contoh 1: hitung umur dari tanggal lahir

python
from datetime import date

def hitung_umur(tgl_lahir_str):
    lahir = datetime.strptime(tgl_lahir_str, "%d-%m-%Y").date()
    hari_ini = date.today()
    umur = hari_ini.year - lahir.year
    # kurangi 1 kalau ulang tahun tahun ini belum lewat
    if (hari_ini.month, hari_ini.day) < (lahir.month, lahir.day):
        umur -= 1
    return umur

print(hitung_umur("17-05-2008"))  # 18
print(hitung_umur("20-12-2008"))  # 17 (ultah belum lewat)

Contoh 2: analisis jeda antar transaksi

python
from datetime import datetime

# timestamp transaksi sebagai string (seperti dari log)
log = [
    "2026-10-08 09:00",
    "2026-10-08 09:45",
    "2026-10-08 11:30",
]

waktu = [datetime.strptime(t, "%Y-%m-%d %H:%M") for t in log]

for i in range(1, len(waktu)):
    jeda = waktu[i] - waktu[i - 1]  # hasilnya timedelta
    menit = jeda.total_seconds() / 60
    print("Jeda transaksi", i, ":", int(menit), "menit")
# Jeda transaksi 1 : 45 menit
# Jeda transaksi 2 : 105 menit

Mengurangi dua datetime langsung menghasilkan timedelta, dan total_seconds() mengubahnya jadi angka yang gampang diolah.

Kesalahan umum

SALAH: pola strptime tidak cocok dengan string

python
datetime.strptime("08/10/2026", "%d-%m-%Y")  # ValueError: pemisah beda!

BENAR: samakan pola dengan format string persis

python
datetime.strptime("08/10/2026", "%d/%m/%Y")  # OK

SALAH: mencampur date dan datetime

python
from datetime import date, datetime
date.today() - datetime.now()  # TypeError: tidak bisa dikurangi

BENAR: samakan tipenya dulu

python
from datetime import date, datetime
datetime.now().date() - date(2026, 10, 1)  # OK, hasilnya timedelta

Tantangan

Hitung Hari Menuju Ujian

Diberi tanggal ujian sebagai string format 'YYYY-MM-DD'. Parsing jadi date, lalu hitung selisih hari dari hari ini dengan timedelta. Cetak 'Tersisa X hari'.