Lewati ke konten utama

Python datetime: Cara Bekerja dengan Tanggal dan Waktu di Python

Pelajari berbagai cara bekerja dengan alat datetime di Python dan sederhanakan semuanya mulai dari parsing string hingga mengelola stempel waktu yang sadar zona waktu.
Diperbarui 28 Sep 2026  · 2 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Bekerja dengan tanggal dan waktu terlihat sederhana sampai Anda mulai berurusan dengan format, zona waktu, aturan daylight saving, atau stempel waktu dari berbagai sistem, saat itulah menyimpan waktu sebagai string atau bilangan bulat mentah bukan lagi pilihan. Modul datetime Python hadir untuk membantu Anda mengelola semua bagian yang bergerak ini dengan cara yang dapat diprediksi.

Panduan ini membahas kelas-kelas inti, cara membuat dan bekerja dengan objek datetime, cara melakukan aritmetika, cara memformat dan mengurai nilai, menangani zona waktu, dan lainnya. Setiap bagian dibangun dari sebelumnya, sehingga Anda dapat berpindah dari operasi dasar ke pola yang lebih lanjut.

Kelas Inti Modul Python datetime

Sebelum melakukan hal yang spesifik, ada baiknya memahami bagaimana Python memodelkan tanggal dan waktu pada tingkat konseptual. Modul datetime menggunakan sekumpulan kecil kelas, masing-masing berfokus pada satu bagian masalah. Mengetahui peran tiap kelas membuat alur kerja selebihnya jauh lebih mudah.

date

Saat Anda hanya memerlukan tanggal kalender tanpa memikirkan waktu atau zona waktu, kelas date adalah yang Anda butuhkan. Ini merepresentasikan tahun, bulan, dan hari menggunakan atribut yang sudah familier.

Berikut atributnya:

  • year

  • month

  • day

Dan metode-metodenya:

  • today()

  • fromisoformat()

  • replace()

  • isoformat()

  • weekday()

  • isoweekday()

from datetime import date
d = date(2025, 3, 1)
print(d)

Kode ini membuat tanggal kalender sederhana. Jika Anda memasukkan kombinasi tidak valid (seperti February 30), Python akan memunculkan yang dikenal sebagai ValueError.

time

Beberapa tugas hanya memerlukan waktu dalam sehari, misalnya pengingat yang berjalan pada pukul 14.30. Kelas time akan berguna karena menyimpan jam, menit, detik, dan (tidak diperlukan untuk contoh ini) mikrodetik atau data zona waktu.

Atributnya adalah: hour, minute, second, microsecond, tzinfo

Metodenya adalah: replace(), isoformat()

from datetime import time
t = time(14, 30, 15)
print(t)

Ini membuat waktu jam tanpa tanggal terlampir. Nilai tidak valid (seperti hour=27) akan menghasilkan galat.

datetime

Kebanyakan situasi dunia nyata menggabungkan tanggal dan waktu, dan di situlah datetime berperan. Ini adalah kelas yang paling serbaguna di modul dan yang paling sering Anda gunakan untuk pencatatan, pemrosesan, dan koordinasi peristiwa.

Atributnya adalah (selain semua yang di atas): tzinfo

Dan metodenya adalah now(), utcnow(), fromisoformat(), strptime(), strftime(), astimezone(). Ia juga mendukung aritmetika dengan timedelta, yang akan saya bahas lebih detail.

from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30)
print(dt)

Ini menghasilkan stempel waktu lengkap dengan komponen tanggal dan waktu.

timedelta

Kapan pun Anda perlu mengukur waktu berlalu atau menggeser stempel waktu maju atau mundur, timedelta adalah pilihan yang tepat. Ini merepresentasikan durasi, bukan momen tertentu.

Atributnya adalah: days, seconds, microseconds. Umumnya digunakan untuk offset, selisih waktu, dan logika penjadwalan.

from datetime import timedelta
delta = timedelta(days=7, hours=3)
print(delta)

Ini merepresentasikan durasi berdurasi tetap. Menjadi sangat berguna saat ditambahkan ke atau dikurangkan dari sebuah datetime.

tzinfo

tzinfo mendefinisikan antarmuka Python untuk zona waktu. Anda tidak akan membuat ini secara langsung, tetapi sistem datetime menggunakannya kapan pun Anda melampirkan atau mengonversi zona waktu.

timezone

timezone adalah implementasi tzinfo bawaan untuk offset UTC tetap seperti UTC atau UTC+1. Ini berguna untuk kasus sederhana di mana aturan daylight saving tidak menjadi masalah.

Membuat dan Mengakses Objek Python datetime

Setelah Anda mengenal kelas-kelasnya, langkah berikutnya adalah mempelajari cara membuat instance-nya. Python memberi Anda beberapa pendekatan bergantung pada sumber data Anda: entri manual, waktu sistem, stempel waktu, atau teks.

Menggunakan konstruktor Kelas

Konstruktor memberi Anda kontrol penuh atas nilai yang Anda buat. Ini sering kali menjadi cara paling eksplisit dan tahan galat untuk membangun objek date, time, atau datetime.

from datetime import date
d = date(2025, 3, 1)
print(d)

Ini membangun tanggal kalender secara langsung. Nilai tidak valid segera memunculkan galat, membantu menangkap kesalahan sejak dini.

from datetime import time
t = time(14, 30, 15)
print(t)

Ini menghasilkan nilai waktu dalam sehari. Gunakan ini saat Anda tidak memerlukan tanggal terlampir.

from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30)
print(dt)

Ini membuat stempel waktu penuh. Menambahkan argumen tzinfo membuatnya sadar zona waktu (timezone-aware).

Membuat dari stempel waktu

Stempel waktu Unix muncul di log, API, dan sistem operasi. Python dengan mudah mengonversinya menjadi objek datetime yang mudah dibaca manusia.

datetime.fromtimestamp(1700000000)
datetime.utcfromtimestamp(1700000000)

Yang pertama menafsirkan stempel waktu dalam waktu lokal; yang kedua menafsirkannya dalam UTC.

Metode kelas untuk nilai saat ini

Saat Anda memerlukan tanggal atau waktu saat ini, Python menyediakan pembantu sederhana. Ini penting untuk pencatatan, pelacakan peristiwa, dan pipeline waktu nyata.

from datetime import datetime, date, timezone
print(date.today())
print(datetime.now())
print(datetime.now(tz=timezone.utc))  # Python 3.12+ preferred

Ini memberi Anda waktu sistem saat ini baik dalam waktu lokal atau UTC, sesuai kebutuhan Anda.

datetime.fromtimestamp(1700000000)
datetime.utcfromtimestamp(1700000000)

Ini mengonversi stempel waktu epoch menjadi objek datetime. Ini sangat umum saat mengurai nilai dari API atau basis data.

Mengurai dari string

Kumpulan data dunia nyata sering menyimpan stempel waktu sebagai teks. Python menyediakan alat andal untuk mengonversi string tersebut menjadi nilai terstruktur.

strptime()
from datetime import datetime
dt = datetime.strptime("2025-03-01 14:30", "%Y-%m-%d %H:%M")
print(dt)

strptime() mengurai string menggunakan pola format. Jika string tidak cocok persis, Python akan memunculkan ValueError.

from datetime import datetime
dt = datetime.strptime("not-a-date", "%Y-%m-%d")

Ini akan gagal karena masukan tidak cocok dengan pola yang diharapkan.

fromisoformat()
datetime.fromisoformat("2025-03-01T14:30:00")

String ISO 8601 diurai dengan mulus karena strukturnya terstandarisasi. Ini sering menjadi cara termudah untuk memuat stempel waktu dari API atau pipeline data modern.

Melakukan Aritmetika Tanggal

Setelah Anda dapat membuat stempel waktu, langkah berikutnya adalah bekerja dengannya. Anda dapat melakukannya dengan menghitung durasi, menggeser tanggal, atau membandingkan interval.

Timedelta untuk perhitungan temporal

timedelta memodelkan periode berdurasi tetap seperti “5 jam” atau “2 minggu.” Periode ini berguna untuk penjadwalan, pencatatan, dan jika Anda memerlukan hitung mundur sederhana.

from datetime import datetime, timedelta
dt = datetime(2025, 3, 1, 14, 30)
new_dt = dt + timedelta(days=5)
print(new_dt)

Contoh ini menggeser stempel waktu maju lima hari.

start = datetime(2025, 3, 1, 9, 0)
end = datetime(2025, 3, 1, 14, 30)
duration = end - start
print(duration.total_seconds())

Di sini, mengurangkan dua datetime memberi Anda timedelta, yang dapat Anda konversi ke detik, hari, atau jam.

Durasi tetap vs. aritmetika yang peka kalender

Tidak semua satuan waktu itu sama. Bulan bervariasi panjangnya, tahun mungkin memiliki hari kabisat, dan perilaku akhir bulan bisa tidak terduga. Untuk skenario ini, timedelta tidak cukup.

dateutil.relativedelta menangani aritmetika yang “peka kalender”:

from dateutil.relativedelta import relativedelta
from datetime import date
d = date(2025, 1, 31)
print(d + relativedelta(months=1))

Ini menangani skenario “31 Februari” yang tidak ada dengan benar dengan menggeser tanggal secara tepat.

Memformat dan Mengurai Tanggal

Pemformatan datetime muncul di mana-mana: API mengharuskan format tertentu, pengguna lebih menyukai teks yang mudah dibaca, dan log bergantung pada string stempel waktu yang konsisten. Python mendukung pemformatan yang fleksibel sekaligus representasi standar.

Pemformatan string dengan strftime

strftime() memungkinkan Anda mengubah objek datetime menjadi string terformat menggunakan kode yang telah ditentukan.

from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30)
print(dt.strftime("%A, %B %d, %Y at %H:%M"))

Ini mencetak string yang mudah dibaca dengan hari dalam seminggu dan nama bulan lengkap.

dt.strftime("%Y-%m-%dT%H:%M:%S")

Ini menghasilkan string bergaya ISO yang cocok untuk penyimpanan data atau API.

Mengurai string dengan strptime

from datetime import datetime
dt = datetime.strptime("2025-03-01 14:30", "%Y-%m-%d %H:%M")
print(dt)

Ini mengonversi teks menjadi objek datetime. Ketidaksesuaian apa pun antara string dan pola akan memunculkan galat.

Bekerja dengan ISO 8601 dan RFC 3339

ISO 8601 mengatasi ambiguitas yang ditemukan pada banyak format tanggal regional. Python mendukungnya secara bawaan:

from datetime import datetime
dt = datetime.fromisoformat("2025-03-01T14:30:00")
print(dt.isoformat())

Ini adalah format paling aman saat bertukar data antar sistem, API, atau basis data.

Menangani Zona Waktu

Zona waktu menghadirkan beberapa tantangan paling rumit dalam pemrograman temporal. Python membantu dengan membedakan antara objek datetime naif dan sadar, serta menyediakan alat untuk penanganan zona dunia nyata.

Objek datetime naif vs. sadar

Datetime naif tidak memiliki zona waktu:

from datetime import datetime
naive_dt = datetime(2025, 3, 1, 14, 30)
print(naive_dt.tzinfo)  # None

Datetime sadar menyertakan offset zona waktu:

from datetime import timezone, timedelta
aware_dt = naive_dt.replace(tzinfo=timezone(timedelta(hours=1)))
print(aware_dt)

Mencampur nilai naif dan sadar dalam perbandingan atau aritmetika biasanya menyebabkan galat.

Menggunakan modul zoneinfo

Modul zoneinfo Python menyediakan akses ke zona waktu IANA dunia nyata:

from zoneinfo import ZoneInfo
from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30, tzinfo=ZoneInfo("Europe/Paris"))
print(dt)

Konversi zona waktu itu sederhana:

dt.astimezone(ZoneInfo("America/New_York"))

Ini mengekspresikan momen yang sama dalam zona waktu lokal yang berbeda.

Mengonversi antar zona waktu

Anda dapat mengonversi stempel waktu yang sadar zona ke zona lain menggunakan astimezone():

from zoneinfo import ZoneInfo
dt_ny = dt.astimezone(ZoneInfo("America/New_York"))
print(dt_ny)

Praktik umum yang baik adalah menyimpan stempel waktu dalam UTC dan hanya mengonversinya saat diperlukan untuk tampilan.

Membandingkan dan Memfilter Tanggal

Perbandingan muncul di hampir setiap alur kerja. Saya memikirkan pengurutan log, pemfilteran peristiwa, atau menentukan apakah sesuatu terjadi sebelum atau sesudah ambang batas.

from datetime import datetime
a = datetime(2025, 3, 1, 12, 0)
b = datetime(2025, 3, 1, 15, 0)
print(a < b)  # True

Perbandingan yang sadar zona waktu memperhitungkan offset:

from datetime import datetime
from zoneinfo import ZoneInfo
dt1 = datetime(2025, 3, 1, 12, 0, tzinfo=ZoneInfo("Europe/London"))
dt2 = datetime(2025, 3, 1, 7, 0, tzinfo=ZoneInfo("America/New_York"))
print(dt1 == dt2)  # True — same moment in time

Memfilter koleksi berjalan secara alami:

dates = [
    datetime(2025, 3, 1, 10),
    datetime(2025, 2, 20, 9),
    datetime(2025, 3, 1, 8)
]
cutoff = datetime(2025, 3, 1)
filtered = [d for d in dates if d >= cutoff]
print(filtered)

Normalisasi UTC berguna saat bekerja lintas zona.

Kasus Penggunaan yang Lebih Lanjut

Datetime muncul di banyak alur kerja di luar penguraian dan aritmetika dasar. Berikut beberapa pola yang sering Anda jumpai.

Stempel waktu Unix

Stempel waktu Unix mengukur detik sejak 1 Januari 1970 (UTC). Ini banyak digunakan dalam pemrograman sistem dan API.

from datetime import datetime
dt = datetime.fromtimestamp(1700000000)
print(dt)

Milidetik dan mikrodetik memerlukan penskalaan:

ts_ms = 1700000000000
dt_ms = datetime.fromtimestamp(ts_ms / 1000)

ts_us = 1700000000000000
dt_us = datetime.fromtimestamp(ts_us / 1_000_000)

Penjadwalan dan timer

Pustaka seperti schedule bergantung pada nilai datetime untuk menentukan kapan tugas harus dijalankan. Baik Anda memicu fungsi setiap beberapa detik atau menjadwalkan peristiwa sekali jalan nanti di hari yang sama, datetime menyediakan fondasi untuk perbandingan tersebut.

Pola analisis data

Atribut datetime sering diekstrak untuk pengelompokan dan analisis berbasis waktu:

dt = datetime(2025, 3, 1, 14, 30)
print(dt.year)
print(dt.isocalendar())

Di pandas, resampling berdasarkan periode sangat umum:

import pandas as pd
df = pd.DataFrame({
    "value": [10, 12, 15],
    "timestamp": pd.to_datetime([
        "2025-03-01",
        "2025-03-02",
        "2025-03-08"
    ])
}).set_index("timestamp")

print(df.resample("W").sum())

Kesimpulan

Untuk mempelajari lebih lanjut tentang datetime, silakan lihat video dari kursus kami Working with Dates and Times in Python oleh Max Shrom dan Data Types for Data Science in Python oleh Jason Myers.

Anda juga mungkin tertarik dengan tutorial kami Converting Strings to Dates as datetime Objects jika Anda memerlukan sedikit bantuan tambahan untuk mengonversi string.


Oluseye Jeremiah's photo
Author
Oluseye Jeremiah
LinkedIn

Penulis teknis yang mengkhususkan diri pada AI, ML, dan ilmu data, membuat gagasan kompleks menjadi jelas dan mudah diakses.

Topik
Python

Belajar Python bersama DataCamp

Kursus

Pengantar Python

4 jam
7M
Kuasai dasar-dasar analisis data dengan Python dalam 4 jam. Kursus online ini memperkenalkan antarmuka Python dan pustaka populer.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

Lihat SelengkapnyaLihat Selengkapnya