Dua tipe inti: date dan datetime
Modul datetime memberimu empat hal yang perlu kamu tahu: date, time, datetime, dan timedelta. Tiga yang pertama sesuai namanya; yang keempat adalah rentang waktu.
date mewakili satu hari (tahun, bulan, tanggal) tanpa jam. datetime adalah tanggal ditambah waktu. Kalau kamu tidak butuh jamnya, date adalah pilihan yang lebih rapi.
Membuat tanggal tertentu
Buat secara langsung:
Argumennya adalah year, month, day untuk date, dan sampai year, month, day, hour, minute, second, microsecond untuk datetime.
Membaca field
Setiap date/datetime punya atribut:
isoformat() sangat membantu untuk output yang bisa dibaca mesin: hasilnya seperti "2026-04-20T09:30:15", yang bisa diurai sistem lain tanpa ambigu.
Memformat dengan strftime
Untuk output yang mudah dibaca manusia, .strftime(fmt) mengubah date atau datetime menjadi string yang sudah diformat:
Kode format yang paling sering perlu diingat:
%Y: tahun 4 digit (2026)%m: nomor bulan, diawali nol (04)%d: tanggal dalam bulan, diawali nol (20)%H/%I: jam, format 24/12 jam%M: menit%S: detik%A/%a: nama hari lengkap / singkat (Monday / Mon)%B/%b: nama bulan lengkap / singkat (April / Apr)%p: AM/PM
Kamu tidak perlu menghafalnya; simpan sebuah referensi dan lihat saat kamu membutuhkannya.
Mengurai dengan strptime
Arah sebaliknya: ambil string dengan bentuk yang sudah diketahui lalu ubah menjadi datetime:
String format harus cocok persis dengan input. Kalau tidak, strptime memunculkan ValueError.
Untuk string ISO-8601 (standar yang bisa dibaca mesin), Python modern punya jalan pintas yang lebih sederhana:
Kalau kamu berhadapan dengan format yang macam-macam, package luar dateutil (pip install python-dateutil) punya parser.parse() yang toleran dan mencoba menebak dengan masuk akal.
Aritmetika dengan timedelta
Untuk menghitung dengan tanggal, pakai timedelta untuk selisih atau pergeseran waktu:
Argumen timedelta: days, seconds, microseconds, milliseconds, minutes, hours, weeks. Tidak ada months atau years, karena panjang bulan berbeda-beda. Untuk perhitungan bulan/tahun, pakai dateutil.relativedelta:
from dateutil.relativedelta import relativedelta
from datetime import date
today = date.today()
next_quarter = today + relativedelta(months=3)
print(next_quarter)
Zona waktu: naive vs aware
datetime tanpa info zona waktu disebut naive: Python tidak tahu zona waktu mana yang diwakilinya. Menghitung waktu dengan datetime naive tidak masalah selama kamu tetap di satu zona waktu yang logis; masalahnya mulai begitu data dari zona yang berbeda bertemu.
Datetime aware membawa info zona waktu. Tambahkan zona waktu secara eksplisit:
Python 3.9 menambahkan modul zoneinfo untuk zona waktu bernama (memakai database IANA milik sistem):
Konversi antar zona dengan .astimezone():
Aturan yang perlu kamu ingat: simpan datetime dalam UTC, dan konversi ke zona lokal hanya saat ditampilkan. Satu kebiasaan itu mencegah sebagian besar bug zona waktu.
Timestamp
Unix timestamp adalah jumlah detik sejak 1970-01-01 UTC. Python mengonversinya dengan mudah:
Timestamp berguna untuk perbandingan, pengurutan, dan bertukar data dengan sistem lain. Untuk output yang dilihat manusia, ubah dulu kembali menjadi datetime.
Mengukur berapa lama sesuatu berjalan
Untuk pengukuran waktu yang cepat, kurangkan dua datetime:
Untuk pengukuran performa yang lebih serius, pakai time.perf_counter(): resolusinya di bawah satu mikrodetik dan tidak terpengaruh perubahan jam sistem. datetime.now() sudah cukup untuk angka seperti "berapa lama panggilan API ini".
Pola yang akan kamu pakai berulang kali
Yang perlu diingat
date,datetime, dantimedeltamencakup 90% kebutuhan.- Pakai ISO-8601 untuk output yang dibaca mesin;
strftimeuntuk yang dibaca manusia. - Simpan dalam UTC; konversi saat ditampilkan.
- Pakai
zoneinfountuk zona waktu bernama. - Untuk bulan dan tahun, pakai
dateutil.relativedelta.
Satu alat lagi untuk perlengkapan dunia nyatamu: regular expression, berikutnya.
Pertanyaan yang sering diajukan
Bagaimana cara mendapatkan tanggal dan waktu saat ini di Python?
datetime.now() mengembalikan tanggal dan waktu lokal saat ini. datetime.utcnow() mengembalikan UTC (meskipun sekarang yang lebih disarankan adalah datetime.now(timezone.utc), karena utcnow() mengembalikan datetime naive). Untuk tanggalnya saja, pakai date.today().
Bagaimana cara memformat tanggal menjadi string?
Pakai .strftime(format) dengan kode format seperti %Y-%m-%d untuk tahun-bulan-hari. Contoh: datetime.now().strftime('%Y-%m-%d %H:%M'). Untuk mengurai string kembali, pakai datetime.strptime(text, format) dengan kode format yang sama.
Bagaimana cara menambahkan hari pada tanggal di Python?
Pakai timedelta: from datetime import date, timedelta; date.today() + timedelta(days=7). timedelta mendukung hari, jam, menit, detik, minggu, dan lainnya. Untuk perhitungan bulan dan tahun, pakai dateutil.relativedelta dari library luar, karena timedelta tidak mengenal bulan.