Tutorial Datetime di Python

 

Di Python, datetime bukanlah sebuah tipe data primitif seperti halnya string, boolean, atau numbers (integer atau float), melainkan kita dapat menjadikan datetime ini sebagai obyek dengan menggunakan sebuah library khusus yang sudah tersedia. Dengan dijadikannya datetime ini sebagai sebuah obyek dengan library tersebut, selanjutnya kita bisa menggunakan beberapa method yang tersedia untuk mengolahnya seperti mencari selisih waktu dari dua buah datetime, atau menentukan datetime tertentu setelah interval waktu tertentu, dsb.

Tutorial kali ini akan dibahas bagaimana kita bekerja dengan datetime di Python. Pembahasan dimulai dari bagaimana kita menggunakan library nya, bagaimana cara mendapatkan datetime pada saat itu (current datetime), bagaimana memformat datetime ke dalam bentuk string, menentukan datetime setelah atau sebelum interval waktu tertentu, mencari selisih waktu dari dua buah datetime, dan terakhir tentang bagaimana kita memparsing datetime yang ada di dalam sebuah string.

Library Datetime

Library yang dimaksud di atas, yang nantinya kita akan gunakan untuk bekerja dengan datetime adalah ‘datetime‘. Cara untuk menggunakan library ini adalah cukup memanggilnya dengan perintah seperti di bawah ini:

import datetime

Mendapatkan Waktu Sekarang

Setelah library datetime kita panggil, selanjutnya kita bisa gunakan method-method yang ada di dalam library tersebut. Salah satunya adalah method untuk mendapatkan waktu sekarang (waktu pada saat kode program dijalankan) atau istilahnya adalah current datetime. Untuk melakukan hal ini, perintah yang kita berikan adalah:

x = datetime.datetime.now()
print(x)

Contoh output dari current datetime adalah sebagai berikut:

2022-01-22 21:09:26.251734

Struktur output di atas terdiri dari year-month-date hour:minute:second.microsecond.

Membuat Obyek Datetime

Selanjutnya adalah bagaimana cara untuk membuat obyek berupa datetime, sehingga nantinya bisa diolah dengan method-method yang tersedia. Untuk membuat obyek datetime, kita bisa menggunakan class constructor dari datetime.

Sebagai contoh misalkan kita akan membuat obyek datetime dari sebuah waktu ‘2022-12-18 18:10:29’, perintah yang kita berikan adalah:

x = datetime.datetime(2022, 12, 18, 18, 10, 29)

Mengakses Bagian dari Obyek Datetime

Setelah sebuah obyek datetime dibuat, kita bisa mengakses nilai dari tiap bagiannya dengan cara cukup memanggil atribut dari obyek tersebut. Berikut ini adalah contohnya:

# mengakses tahun
print(x.year)

# mengakses bulan
print(x.month)

# mengakses tanggal
print(x.day)

# mengakses jam
print(x.hour)

# mengakses menit
print(x.minute)

# mengakses detik
print(x.second)

# mengakses microsecond
print(x.microsecond)

Memformat Datetime

Sebuah obyek yang sudah dibuat kita bisa format tampilannya ketika ditampilkan (menggunakan print()). Setelah diformat, obyek datetime ini akan diubah ke dalam string terlebih dahulu sebelum ditampilkan. Bagaimana cara memformat string ini? Caranya adalah menggunakan method strftime().

Sebagai contoh, misalkan kita punya obyek datetime sebagai berikut:

x = datetime.datetime(2022, 12, 18, 18, 10, 29)

Selanjutnya kita akan menampilkan x tersebut dengan print() dalam bentuk format: Sunday, 18 Dec 2022, 06:10:29 PM.

Untuk memformat datetime x ke dalam bentuk di atas, kita berikan perintah:

print(x.strftime("%A, %d %b %Y, %I:%M:%S %p"))

Hasil dari perintah di atas akan dihasilkan string dan ditampilkan ke layar sebagai berikut:

Sunday, 18 Dec 2022, 06:10:29 PM

Coba perhatikan perintah strftime() di atas! Di situ terdapat beberapa directive atau format specifier seperti %A, %d, %b, %Y dan seterusnya. Setiap directive mempunyai makna sendiri-sendiri untuk menentukan formatnya. Misalkan %A akan menampilkan nama hari pada waktu tersebut, %d menampilkan tanggal dari waktunya, %b untuk nama bulan dalam tiga huruf, dan seterusnya. Lebih lengkapnya perhatikan Tabel 1 berikut ini untuk penjelasan setiap directive yang bisa digunakan.

DirectiveKeteranganContoh Tampilan
%aNama hari dalam tiga hurufSun, Mon, Tue
%ANama hari lengkapSunday, Monday, Tuesday
%dTanggal, dalam range 00-3101, 02, 10, 15
%bNama bulan dalam tiga hurufJan, Feb, Mar
%BNama bulan lengkapJanuary, February, March
%mBulan dalam angka 01-1201, 02, 12
%yTahun dalam dua digit20, 21, 22
%YTahun dalam empat digit2020, 2021, 2022
%HJam, dalam range 00 – 2308, 10, 23
%IJam, dalam range 00 – 1208, 10, 11
%pAM/PMAM, PM
%MMenit, dalam range 00 – 5909, 10, 58
%SDetik, dalam range 00 – 5909, 10, 58
%fMikro detik, dalam range 000000-999999000001, 200001
Tabel 1. Daftar directive atau format specifier datetime

Adapun directive secara lengkap bisa dilihat di dokumentasi datetime python.

Menentukan Datetime Berdasarkan Selisih Waktu

Di dalam Python kita juga dapat menentukan datetime berdasarkan selisih jarak waktu dengan datetime lain. Sebagai contoh misalnya, kapan datetime 45 hari setelah 23 Januari 2022, pukul 12:30? Untuk menentukan datetime tersebut kita dapat menggunakan method timedelta().

Berikut ini adalah perintah untuk menentukan datetime 45 hari setelah 23 Januari 2022, pukul 12:30.

# membuat datetime 23 Januari 2002, 12:30 misalkan x
x = datetime.datetime(2022, 1, 23, 12, 30, 0)
# menentukan datetime setelah 45 hari dari x misalkan y
y = x + datetime.timedelta(days=45)
# menampilkan y
print(y.strftime("%d %B %Y, pukul %H:%M"))

Output dari perintah di atas diperoleh

09 March 2022, pukul 12:30

Selanjutnya bagaimana jika ingin menentukan n hari sebelum datetime tertentu? Caranya cukup menggunakan operator pengurangan (-) pada operasi aritmatikanya.

Perlu diketahui bahwa argumen dari method timedelta(), tidak harus dalam days. Namun bisa diisi dengan hours, minutes, dan juga seconds. Sebagai contoh misalnya akan dicari datetime setelah 45 hari, 2 jam, 10 menit dari tanggal datetime tertentu, kita bisa tuliskan perintah berikut ini.

y = x + datetime.timedelta(days=45, hours=2, minutes=10)

Mencari Selisih Waktu Dua Datetime

Apabila sebelumnya dibahas tentang bagaimana menentukan datetime berdasarkan selisih waktu terhadap sebuah datetime tertentu, maka pada bagian ini akan dibahas bagaimana menentukan selisih dari dua buah datetime. Sebagai contoh misalkan akan dicari selisih waktu dalam satuan jam dari datetime 23 Jan 2022, 10:00 dengan 12 Feb 2022, 16:00.

Untuk mencari selisih waktu dari dua datetime, kita masih bisa menggunakan method timedelta(). Berikut ini contoh perintah untuk mencari selisih waktu dalam satuan jam dari datetime 23 Jan 2022, 10:00 dan 12 Feb 2022, 16:00.

x = datetime.datetime(2022, 1, 23, 10, 0, 0)
y = datetime.datetime(2022, 2, 12, 16, 0, 0)
z = y - x

Misalkan z adalah datetime yang menyatakan selisih dari dua datetime yaitu x dan y. Apabila z ini kita tampilkan, maka isinya z adalah sebagai berikut.

datetime.timedelta(days=20, seconds=21600)

Dari hasil di atas tampak bahwa selisih ketua datetime adalah 20 hari, 21.600 detik. Selanjutnya bagaimana cara menyatakan ke dalam satuan jam? Untuk menyatakan hal ini perlu sedikit gunakan rumus untuk mengkonversi 20 hari ini ke jam, dan 21.600 detik juga ke dalam satuan jam. Barulah kita jumlahkan keduanya untuk mendapatkan total selisih dalam jam.

selisih_jam = z.days * 24 + z.seconds / 3600
print(selisih_jam)

Dari perhitungan di atas diperoleh output:

486.0

Sehingga selisih dari kedua datetime adalah 486 jam.

Memparsing Datetime dari String

Misalkan diberikan sebuah dua buah string. String pertama adalah "Pada tanggal 23 Jan 2022, Budi berangkat Yogyakarta pukul 09.00 WIB". Adapun string kedua adalah "Budi pulang dari Yogyakarta pada tanggal 25 Jan 2022, pukul 18.30 WIB". Selanjutnya dari dua string tersebut, kita akan menghitung berapa jam Budi berada di Yogyakarta.

Untuk menjawab pertanyaan tersebut, sebenarnya konsepnya sama seperti pembahasan sebelumnya yaitu mencari selisih waktu dari dua buah datetime. Namun, permasalahannya adalah datetime tersebut terletak dalam sebuah string. Sehingga di sini kita tidak bisa langsung mencari selisihnya disebabkan kita belum memiliki data dalam bentuk obyek datetime. Oleh karena itu kita harus dapatkan obyek datetime nya terlebih dahulu dari kedua string yang diketahui tersebut, dengan cara parsing.

Bagaimana cara melakukan parsing datetime dari sebuah string? Caranya adalah menggunakan method strptime(). Perhatikan contoh berikut untuk melakukan parsing datetime dari kedua string yang diketahui di atas.

str1 = "Pada tanggal 23 Jan 2022, Budi berangkat Yogyakarta pukul 09.00 WIB"
str2 = "Budi pulang dari Yogyakarta pada tanggal 25 Jan 2022, pukul 18.30 WIB"

# parsing datetime keberangkatan
dt_pergi = datetime.datetime.strptime(str1, "Pada tanggal %d %b %Y, Budi berangkat Yogyakarta pukul %H.%M WIB")

# parsing datetime pulang
dt_pulang = datetime.datetime.strptime(str2, "Budi pulang dari Yogyakarta pada tanggal %d %b %Y, pukul %H.%M WIB")

Apabila datetime pergi (dt_pergi) dan pulang (dt_pulang) hasil parsing ini ditampilkan, maka akan diperoleh hasil sebagai berikut.

datetime.datetime(2022, 1, 23, 9, 0)
datetime.datetime(2022, 1, 25, 18, 30)

Perhatikan penggunaan method strptime() di atas! Tampak bahwa untuk proses parsing juga diperlukan directive atau format specifier untuk datetime seperti yang telah disajikan pada Tabel 1 di atas.

Setelah datetime pergi dan pulang ini diperoleh, barulah kita bisa cari selisih kedua datetime ini dari timedelta keduanya dengan cara yang persis sama dengan sebelumnya. Berikut ini perintahnya.

# menghitung selisih dalam datetime
selisih = dt_pulang - dt_pergi

# mengkonversi selisih dalam jam
lama_tinggal = selisih.days * 24 + selisih.seconds / 3600

dan … akan diperoleh hasil

57.5

Sehingga dapat diperoleh informasi bahwa Budi berada di Yogyakarta selama 57.5 jam.

OK… demikian tutorial tentang bekerja dengan datetime di Python ini dijelaskan. Mudah bukan penggunaanya? Semoga tutorial ini dapat bermanfaat. Apabila ada pertanyaan tentang tutorial ini, maka bisa ditanyakan di kolom komentar. Selamat belajar !! 😀

Bagikan artikel ini jika bermanfaat !

Assalaamu'alaikum.. aktivitas keseharian saya mengajar di Universitas Sebelas Maret, dengan matakuliah pemrograman dan basis data. Adapun bidang penelitian saya tentang computational thinking dan computer-aided learning.

Leave a Reply