File dan Data · Pelajaran 6 dari 8
Tanggal dan waktu
9 menit baca · BelajarCode
Banyak pekerjaan administrasi berurusan dengan tanggal: jatuh tempo tagihan, masa garansi, keterlambatan pengembalian, atau jadwal rapat. Modul datetime menghitung semuanya dengan benar, termasuk tahun kabisat.
1from datetime import date, timedelta23tanggal_nota = date(2026, 9, 15)4jatuh_tempo = tanggal_nota + timedelta(days=30)5print("Jatuh tempo:", jatuh_tempo)6print("Hari:", ["Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"][jatuh_tempo.weekday()])78dibayar = date(2026, 10, 22)9terlambat = (dibayar - jatuh_tempo).days10print("Terlambat:", terlambat, "hari")11print("Denda:", max(0, terlambat) * 2000)Jatuh tempo: 2026-10-15 Hari: Kamis Terlambat: 7 hari Denda: 14000
date(tahun, bulan, tanggal)membuat sebuah tanggal.timedelta(days=30)adalah rentang waktu 30 hari. Tanggal ditambah timedelta menghasilkan tanggal baru.- Selisih dua tanggal adalah timedelta, dan
.daysmemberi banyak harinya. weekday()bernilai 0 untuk Senin sampai 6 untuk Minggu.
Membaca dan menulis format tanggal
Di Indonesia, tanggal biasa ditulis hari/bulan/tahun. Fungsi strptime membaca teks menjadi tanggal, dan strftime menulis tanggal dengan format tertentu.
1from datetime import datetime23teks = "17/08/2026 09:30"4waktu = datetime.strptime(teks, "%d/%m/%Y %H:%M")5print(waktu.year, waktu.month, waktu.day, waktu.hour)6print(waktu.strftime("%Y-%m-%d"))78BULAN = ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli",9 "Agustus", "September", "Oktober", "November", "Desember"]10print(f"{waktu.day} {BULAN[waktu.month - 1]} {waktu.year}, pukul {waktu:%H.%M}")2026 8 17 9 2026-08-17 17 Agustus 2026, pukul 09.30
Nama bulan ditulis sendiri dalam bahasa Indonesia, supaya hasilnya tidak bergantung pada pengaturan bahasa komputer.
| Kode | Artinya | Contoh |
|---|---|---|
%d | Tanggal dua digit | 07 |
%m | Bulan dua digit | 09 |
%Y | Tahun empat digit | 2026 |
%H | Jam 24 jam | 14 |
%M | Menit | 05 |
Menghitung hari kerja
1from datetime import date, timedelta23def tambah_hari_kerja(mulai, hari, libur=()):4 tanggal = mulai5 sisa = hari6 while sisa > 0:7 tanggal += timedelta(days=1)8 if tanggal.weekday() < 5 and tanggal not in libur:9 sisa -= 110 return tanggal1112libur_nasional = {date(2026, 8, 17)}13mulai = date(2026, 8, 13)14print("Selesai:", tambah_hari_kerja(mulai, 5, libur_nasional))Selesai: 2026-08-21
Mulai Kamis 13 Agustus, lima hari kerja berikutnya adalah 14, 18, 19, 20, dan 21 Agustus. Sabtu, Minggu, dan 17 Agustus dilewati.
Daftar libur harus diperbarui
Tanggal libur nasional dan cuti bersama ditetapkan pemerintah setiap tahun dan bisa berubah. Simpan daftar libur di satu tempat, misalnya file CSV, dan perbarui setiap tahun, jangan ditulis tersebar di banyak bagian program.
Cek pemahaman
Apa hasil (date(2026, 3, 1) - date(2026, 2, 1)).days?
Latihan
Masa garansi
Sebuah toko memberi garansi 90 hari sejak tanggal pembelian. Buat fungsi yang menerima tanggal beli dan tanggal klaim dalam format hari/bulan/tahun, lalu menampilkan apakah klaim masih dalam masa garansi dan berapa hari tersisa atau terlewat.
Pembahasan
1from datetime import datetime, timedelta23def cek_garansi(beli, klaim):4 tanggal_beli = datetime.strptime(beli, "%d/%m/%Y").date()5 tanggal_klaim = datetime.strptime(klaim, "%d/%m/%Y").date()6 akhir = tanggal_beli + timedelta(days=90)7 selisih = (akhir - tanggal_klaim).days8 if selisih >= 0:9 return f"Masih bergaransi sampai {akhir:%d/%m/%Y}, sisa {selisih} hari"10 return f"Garansi habis {akhir:%d/%m/%Y}, terlewat {-selisih} hari"1112print(cek_garansi("01/07/2026", "15/09/2026"))13print(cek_garansi("01/05/2026", "15/09/2026"))Masih bergaransi sampai 29/09/2026, sisa 14 hari Garansi habis 30/07/2026, terlewat 47 hari
Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Python online.