Lewati ke konten utama

Python timedelta: Bekerja dengan Interval Waktu di Python

Di Python, timedelta adalah tipe data dalam modul datetime yang digunakan untuk merepresentasikan durasi atau selisih antara dua titik waktu.
Diperbarui 29 Sep 2026  · 9 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Banyak dataset dunia nyata berisi tanggal dan waktu, dan operasi yang umum dalam data science adalah menghitung selisih waktu antara dua titik waktu.

Satuan yang kita gunakan untuk mengukur tanggal dan waktu (tahun, bulan, hari, jam, menit, detik) tidak selalu mudah digunakan, terutama ketika satuan-satuan ini memiliki panjang yang tidak seragam.

Namun, tipe data timedelta milik Python, yang merupakan bagian dari modul datetime, menangani kompleksitas perhitungan interval waktu.

Mari mulai dengan jawaban singkat tentang apa itu timedelta di Python, lalu lanjutkan dengan detailnya.

Untuk mempelajari lebih lanjut tentang tanggal dan waktu di Python, lihat kursus Working With Dates and Time in Python ini.

Jawaban Singkat: Apa itu timedelta di Python

Dua tipe data terpenting dan paling sering digunakan dari modul datetime adalah timedelta dan datetime. Objek datetime merepresentasikan titik waktu spesifik (misalnya, 1 Januari 2024 pukul 10.30), sedangkan objek timedelta merepresentasikan durasi atau interval antara dua titik. Anggap saja seperti perbedaan antara pertanyaan "Kapan?" (datetime) dan "Berapa lama?" (timedelta).

Pertimbangkan dua tanggal, yang dapat kita representasikan menggunakan dua objek datetime. Mengurangkan satu tanggal dari tanggal lain akan menghasilkan objek timedelta yang merepresentasikan interval waktu di antara tanggal-tanggal tersebut:

import datetime

first_date = datetime.datetime(year=2024, month=1, day=1)
second_date = datetime.datetime(year=2024, month=5, day=27)
interval = second_date - first_date
print(interval)
147 days, 0:00:00

Output menunjukkan kedua tanggal berjarak tepat 147 hari. Pada contoh berikut, kita menggunakan tanggal dan waktu saat kode dijalankan dengan memanggil datetime.datetime.now():

first_date = datetime.datetime(year=2024, month=1, day=1)
second_date = datetime.datetime.now()
interval = second_date - first_date

print(second_date)
print(interval)
2024-05-28 08:32:44.871646
148 days, 8:32:44.871646

Objek timedelta kini menunjukkan waktu yang berlalu antara awal 2024 dan tanggal serta waktu saat kode dijalankan.

Kita akan mengeksplorasi timedelta Python lebih lanjut dalam artikel ini.

Membuat Objek timedelta

Pada bagian sebelumnya, kita membuat objek timedelta dari dua objek datetime, tetapi kita juga dapat membuat interval waktu secara langsung dengan memanggil konstruktor timedelta():

interval = datetime.timedelta(days=10, seconds=3600)
print(interval)
10 days, 1:00:00

Intervalnya berdurasi sepuluh hari dan satu jam. Kita juga bisa menggunakan satuan waktu lain saat membuat instance timedelta:

interval = datetime.timedelta(weeks=1, days=3, hours=1)
print(interval)
10 days, 1:00:00

Satuan waktu berikut valid saat memanggil timedelta():

  • weeks
  • days
  • hours
  • minutes
  • seconds
  • milliseconds
  • microseconds

Tutorial ini akan membahas lebih dalam bagaimana interval waktu disimpan dalam objek timedelta.

Aritmetika Dasar dengan timedelta

Kita juga dapat melakukan operasi aritmetika dengan objek timedelta. Pertimbangkan tiga objek datetime berikut, yang merepresentasikan tanggal rilis Python 1.0, Python 2.0, dan Python 3.0. Mengurangkan objek datetime satu sama lain menghasilkan objek timedelta:

release_date_python_1 = datetime.datetime(year=1991, month=2, day=20)
release_date_python_2 = datetime.datetime(year=2000, month=10, day=16)
release_date_python_3 = datetime.datetime(year=2008, month=12, day=3)

​time_between_1_and_2 = release_date_python_2 - release_date_python_1
time_between_2_and_3 = release_date_python_3 - release_date_python_2

​print(time_between_1_and_2)
print(time_between_2_and_3)
3526 days, 0:00:00
2970 days, 0:00:00

Output menunjukkan jumlah hari antara rilis Python 1.0 dan 2.0 serta antara rilis Python 2.0 dan 3.0. Interval waktu tersebut adalah objek timedelta.

Kita juga bisa melakukan penjumlahan dan pengurangan antara objek timedelta dan objek datetime. Mari tambahkan timedelta dengan days=100 ke release_date_python_3:

print(release_date_python_3 + datetime.timedelta(days=100))
2009-03-13 00:00:00

Python 3.0 dirilis pada 3 Desember 2008. Menambahkan seratus hari ke tanggal ini membawa kita ke 13 Maret 2009.

Namun, kita juga dapat melakukan operasi aritmetika langsung dengan objek timedelta:

print("Difference between gap 1 and gap 2")
print(time_between_1_and_2 - time_between_2_and_3)

print("Sum of gap 1 and gap 2")
print(time_between_1_and_2 + time_between_2_and_3)
Difference between gap 1 and gap 2
556 days, 0:00:00

Sum of gap 1 and gap 2
6496 days, 0:00:00

Output mengonfirmasi bahwa objek timedelta dapat dikurangkan dan dijumlahkan. Perkalian dan pembagian juga dimungkinkan:

print("Multiply time interval by 3:")
print(time_between_1_and_2 * 3)

print("Divide time interval by 3:")
print(time_between_1_and_2 / 3)
Multiply time interval by 3:
10578 days, 0:00:00

Divide time interval by 3:
1175 days, 8:00:00

Kita juga dapat membandingkan objek timedelta:

print("Check if gap 1 is greater than gap 2")
print(time_between_1_and_2 > time_between_2_and_3)
True

Output mengonfirmasi bahwa interval antara tanggal rilis Python 1.0 dan Python 2.0 lebih panjang daripada interval antara Python 2.0 dan Python 3.0.

Atribut dan Metode Kunci timedelta

Objek timedelta merepresentasikan interval waktu dengan menyimpan jumlah hari, detik, dan mikrodetik. Ketiga satuan ini adalah satu-satunya satuan waktu yang direpresentasikan oleh atribut dalam kelas timedelta:

interval = datetime.timedelta(
    weeks=1,
    hours=10,
    minutes=22,
    milliseconds=1042,
)

print(f"{interval = }")
print(f"{interval.days = }")
print(f"{interval.seconds = }")
print(f"{interval.microseconds = }")
interval = datetime.timedelta(days=7, seconds=37321, microseconds=42000)
interval.days = 7
interval.seconds = 37321
interval.microseconds = 42000

Meskipun pemanggilan timedelta() menyertakan argumen untuk minggu, jam, menit, dan milidetik, konstruktor mengonversi satuan-satuan ini menjadi hari, detik, dan mikrodetik. Pemanggilan print() menyertakan f-string dengan tanda sama dengan = untuk menampilkan nama variabel dan nilainya. Anda dapat mempelajari lebih lanjut tentang f-string dalam tutorial f-string formatting in Python ini.

Alat berguna lain dari kelas timedelta adalah metode total_seconds(). Metode ini mengembalikan keseluruhan interval waktu dalam detik:

print("Total time interval in seconds:")
print(interval.total_seconds())
Total time interval in seconds:
642121.042

Nilai ini merepresentasikan keseluruhan interval waktu dalam detik. Ini berbeda dengan nilai .seconds, yang hanya menunjukkan komponen detik dari interval tanpa memperhitungkan hari dan mikrodetik.

Kita dapat menggunakan nilai yang dikembalikan oleh .total_seconds() untuk mengonversi interval waktu ke satuan lainnya:

print("Total time interval in days:")
print(interval.total_seconds() / 3600 / 24)
Total time interval in days:
7.431956504629629

Output menunjukkan interval waktu dalam hari karena nilai yang dikembalikan oleh .total_seconds() dibagi dengan jumlah detik dalam satu jam dan jumlah jam dalam satu hari.

Contoh timedelta: Menghitung Pertumbuhan

Mari lihat sebuah contoh. Toko online sebuah perusahaan yang menjual buku Python mencatat semua penjualannya. Berikut data untuk satu pelanggan:

data = {
    "customer_id": 3542,
    "sales": [
        {"date": "2024-04-21T13:23:45", "price": 24.99, "quantity": 1},
        {"date": "2024-02-13T10:54:12", "price": 24.99, "quantity": 2},
        {"date": "2024-01-08T20:32:24", "price": 18.99, "quantity": 1},
    ],
}

Kita perlu menghitung selisih waktu antara pesanan pertama dan terakhir dari seorang pelanggan. Pesanan selalu berurutan secara kronologis dalam daftar yang memuat semua penjualan.

Langkah pertama kita adalah mengekstrak tanggal dari struktur bertingkat ini dan mengonversinya menjadi objek datetime. Syukurlah, stempel waktunya menggunakan format standar ISO 8601 (YYYY-MM-DDTHH:MM:SS), sehingga kita dapat menggunakan metode fromisoformat() yang praktis:

sales = data["sales"]
dates = []
for item in sales:
    date = datetime.datetime.fromisoformat(item["date"])
    dates.append(date)

print(dates)
[datetime.datetime(2024, 4, 21, 13, 23, 45), datetime.datetime(2024, 2, 13, 10, 54, 12), datetime.datetime(2024, 1, 8, 20, 32, 24)]

Daftar dates berisi objek datetime dengan tanggal setiap pesanan. Terakhir, kita dapat menghitung interval waktu antara pesanan pertama dan terakhir:

time_span = dates[0] - dates[-1]
print(time_span)
print(time_span.days)
103 days, 16:51:21
103

Selisih antara tanggal pertama dan terakhir menghasilkan objek timedelta. Kode menampilkan time_span, yang menunjukkan jumlah hari, jam, menit, dan detik. Kita juga menampilkan time_span.days untuk menunjukkan hanya jumlah hari bulatnya.

Jika Anda ingin mempelajari lebih lanjut tentang mengonversi string ke datetime, lihat tutorial Python String to Datetime ini.

Tips Cepat Saat Menggunakan timedelta

Mari lihat beberapa hal yang perlu diingat saat menggunakan timedelta Python:

1. Sebaiknya gunakan argumen kata kunci saat memanggil timedelta() untuk menghindari kesalahan satuan:

interval = datetime.timedelta(weeks=1, days=3, hours=1, milliseconds=1354)

2. Saat mencari interval waktu antara dua tanggal di zona waktu berbeda, timedelta mengonversi tanggal menjadi tanggal UTC sebelum menghitung selisih waktunya:

import zoneinfo

some_date = datetime.datetime.fromisoformat("2024-01-01T00:00:00")

some_date_lon = some_date.replace(tzinfo=zoneinfo.ZoneInfo("Europe/London"))
some_date_nyc = some_date.replace(tzinfo=zoneinfo.ZoneInfo("America/New_York"))

print(some_date_lon)
print(some_date_nyc)
print(some_date_nyc - some_date_lon)
2024-01-01 00:00:00+00:00
2024-01-01 00:00:00-05:00
5:00:00

Tanggal pada some_date menunjukkan awal tahun baru. Ini adalah objek datetime naif karena tidak memiliki informasi zona waktu. Namun, some_date_lon dan some_date_nyc adalah objek datetime sadar zona waktu karena masing-masing merepresentasikan awal tahun baru di London dan New York.

timedelta yang diperoleh dari pengurangan dua objek datetime sadar tersebut menunjukkan interval waktu lima jam, yang merupakan selisih waktu terhadap UTC.

3. Perubahan daylight saving tidak diperhitungkan oleh timedelta:

nyc = zoneinfo.ZoneInfo("America/New_York")

first_time = datetime.datetime.strptime("2024-03-10 1:00am", "%Y-%m-%d %I:%M%p")
first_time = first_time.replace(tzinfo=nyc)

second_time = datetime.datetime.strptime("2024-03-10 3:00am", "%Y-%m-%d %I:%M%p")
second_time = second_time.replace(tzinfo=nyc)

time_difference = second_time - first_time
print("Time difference between the first and second time:")
print(time_difference)

print("Checking the DST status of the first and second time:")
print(f"{first_time.dst() = }")
print(f"{second_time.dst() = }")
Time difference between the first and second time:
2:00:00

Checking the DST status of the first and second time:
first_time.dst() = datetime.timedelta(0)
second_time.dst() = datetime.timedelta(seconds=3600)

Kedua waktu tersebut merepresentasikan pukul 1.00 pagi dan 3.00 pagi pada 3 Maret 2024 di New York. Daylight saving dimulai pada pukul 2.00 pagi di hari yang sama ketika jam langsung maju ke pukul 3.00 pagi. Selisih antara kedua waktu menghasilkan timedelta selama dua jam meskipun hanya satu jam yang berlalu di antara kedua waktu karena dimulainya daylight saving.

Kita dapat mengonversi ke UTC jika membutuhkan jumlah waktu yang benar-benar berlalu:

first_time_utc = first_time.astimezone(zoneinfo.ZoneInfo("UTC"))
second_time_utc = second_time.astimezone(zoneinfo.ZoneInfo("UTC"))
time_difference_utc = second_time_utc - first_time_utc

print("Actual time difference between the first and second time:")
print(time_difference_utc)
Actual time difference between the first and second time:
1:00:00

Mengonversi ke UTC sebelum mengurangkan objek datetime memberikan waktu aktual di antara kedua objek datetime.

Kesimpulan

Kelas timedelta Python menawarkan cara yang lugas untuk menangani interval waktu, sehingga memudahkan bekerja dengan rentang waktu dalam berbagai satuan. Kita telah mengeksplorasi cara membuat objek timedelta dan melakukan operasi aritmetika dengannya, termasuk penjumlahan, pengurangan, perkalian, dan pembagian.

Anda dapat membaca lebih lanjut tentang penanganan tanggal dan waktu pada artikel berikut:


Stephen Gruppetta's photo
Author
Stephen Gruppetta
LinkedIn
Twitter

Saya belajar Fisika dan Matematika pada tingkat sarjana di University of Malta. Kemudian, saya pindah ke London dan meraih gelar PhD dalam bidang Fisika dari Imperial College. Saya meneliti teknik optik baru untuk memindai retina manusia. Sekarang, saya berfokus menulis tentang Python, berkomunikasi tentang Python, dan mengajar Python.

Topik
Python
Analisis Data

Pelajari Python dengan kursus-kursus ini!

Kursus

Pengantar Python

4 jam
7.1M
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