Tanggal dan waktu agak rumit untuk membahasnya, karena merupakan salah satu tipe data khusus. Meski begitu, hal ini tetap harus dipelajari. Karena belajar python itu harus lengkap, supaya mengurangi hal yang membingungkan apa lagi menjadi suatu kerumitan tersendiri dalam memanipulasi date time python.
Parsing String Agar Mengenali Date Time
Misalkan saya memiliki sebuah data berupa string seperti ini:
data_str = "2021-06-12T07:22:18-0500"Meski sebenarnya saya mengetahui itu adalah tanggal dan waktu, namun saya ingin supaya lebih mudah untuk dibaca. Maka, yang saya lakukan adalah:
import datetime dt = datetime.datetime.strptime(data_str, "%Y-%m-%dT%H:%M:%S%z") print(dt) # dan outputnya menjadi seperti ini 2021-06-12 07:22:18-05:00Konstruksi Timezone dan Date Time
Untuk membuat itu, kita harus menambahkan objek tzinfo. Ini akan memberikan offset UTC dan singkatan timezone sebagai fungsi tanggal dan waktu. Di python, modul datetime menyediakan class timezone untuk implementasi konkrit tzinfo, yang juga membutuhkan timedelta serta parameter name tapi ini opsional saja.
from datetime import datetime, timezone, timedelta JKT = timezone(timedelta(hours=+7)) dt = datetime(2021, 6, 11, 12, 30, 00, tzinfo=JKT) print(dt) 2021-06-11 12:30:00+07:00 print(dt.tzname()) UTC+07:00Menghitung Tanggal Akan Datang
Di python, menggunakan modul timedelta bisa digunakan untuk menghitung perbedaan waktu seperti berikut ini:
Karena timedelta tidak menghitung tahun, melainkan hanya hari, detik, dan milidetik maka tidak memiliki atribut years atau year. Jadi kalau ingin menghitung tahun dengan timedelta, maka days dibagi 365 (hari dalam setahun).
print(delta.days / 365.25) 1.2273972602739727Mari kita coba menghitung x hari dari sekarang adalah tanggal berapa
from datetime import datetime, timedelta def waktu_akan_datang(date_format="%d %B %Y", add_days=''): waktu_n_datang = datetime.now() + timedelta(days=add_days) return waktu_n_datang.strftime(date_format)Dan hasilnya adalah
# 30000 hari dari sekarang waktu_akan_datang(add_days=30000) '02 August 2103' # 3 hari dari sekarang waktu_akan_datang(add_days=3) '15 June 2021' # 30 hari dari sekarang waktu_akan_datang(add_days=30) '12 July 2021'Basic menggunakan Date Time
Pada modul datetime memiliki tiga objek primer yaitu date, time, dan datetime
import datetime # Date Object today = datetime.date.today() new_year = datetime.date(2021, 1, 1) # Time Object noon = datetime.time(12, 0, 0) # Current datetime now = datetime.datetime.now() # Datetime Object dt = datetime.datetime(2021, 6, 6, 0, 0, 0)Saya sudah memiliki variabel di atas, tujuannya untuk melakukan operasi aritmatika. Namun operasi aritmatika untuk objek-objek tersebut, hanya bisa dilakukan pada tipe data yang sama. Melakukan aritmatika sederhana dengan instance dari tipe yang berbeda akan mendapatkan TypeError seperti berikut.
Kode di atas, saya melakukan pengurangan dari noon - today, karena noon adalah datetime.time maka tidak bisa langsung dikurang dengan datetime.date.
Sebagai gantinya Kamu bisa melakukan yang seperti ini
print(datetime.datetime(today.year, today.month, today.day) - dt) 6 days, 0:00:00Pada saat saya print(today), outputnya adalah tanggal hari ini 2021-06-12 sehingga memang tidak memungkinkan untuk melakukan operasi aritmatika. Karena itu, pada contoh kode di atas, saya memisahkan bagian-bagiannya. Dan apabila saya lakukan seperti ini
print(datetime.datetime(today.year, today.month, today.day)) 2021-06-12 00:00:00Dan sekarang barulah bisa melakukan operasi aritmatika
Dengan cara lain, saya melakukannya seperti berikut
Kalau saya melakukan print print(datetime.datetime.combine(today, noon)) hasilnya kurang lebih sama seperti sebelumnya. Berbeda pada jam, karena jam diambil dari variabel noon, sedangkan sebelumnya tidak.
Aritmatika Date Sederhana
today = datetime.date.today() yesterday = today - datetime.timedelta(days=1) tomorrow = today + datetime.timedelta(days=1) print('Hari ini:', today) Hari ini: 2021-06-12 print('Kemarin:', yesterday) Kemarin: 2021-06-11 print('Besok:', tomorrow) Besok: 2021-06-13 print('Antara besok dan kemarin:', tomorrow - yesterday) Antara besok dan kemarin: 2 days, 0:00:00Iterasi Date
Kadang saya perlu membuat perulangan tanggal dengan rentang tertentu, saya melakukannya dengan library datetime dan objek timedelta.
import datetime day_delta = datetime.timedelta(days=1) start_date = datetime.date.today() end_date = start_date + 7*day_delta for i in range((end_date - start_date).days): print(start_date + i*day_delta) 2021-06-12 2021-06-13 2021-06-14 2021-06-15 2021-06-16 2021-06-17 2021-06-18Akhir Kata
Baiklah, ini saja untuk tanggal dan waktu atau date time di python. Kalian boleh share tulisan ini ke siapa saja yang menurut kalian saat ini sedang membutuhkannya. Selanjutnya belajar python enum