Manakah dari fungsi berikut pada python yang mengubah tanggal menjadi waktu yang sesuai?

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:00

Konstruksi 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:00

Menghitung Tanggal Akan Datang

Di python, menggunakan modul timedelta bisa digunakan untuk menghitung perbedaan waktu seperti berikut ini:

from datetime import datetime, timedelta

sekarang = datetime.now()
sebelumnya = datetime(2020, 3, 21)

delta = sekarang - sebelumnya

print(delta)
448 days, 0:42:39.168143

print(delta.days)
448

print(delta.seconds)
2559

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.2273972602739727

Mari 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.

print(noon-today)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.date'

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:00

Pada 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:00

Dan sekarang barulah bisa melakukan operasi aritmatika

Dengan cara lain, saya melakukannya seperti berikut

print(datetime.datetime.combine(today, noon) - dt)
6 days, 12:00:00

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:00

Iterasi 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-18

Akhir 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

Apa fungsi dari nomor index pada list?

List sama seperti array, list juga memiliki nomer indeks untuk mengakses data atau isinya. Nomer indeks list selalu dimulai dari nol ( 0 ). Nomer indeks ini yang kita butuhkan untuk mengambil isi (item) dari list.

Apa yang dimaksud dengan list di Python?

List adalah tipe data terpenting dalam bahasa python. Dalam bahasa Python, list ditulis sebagai list nilai yang dipisahkan koma di dalam tanda kurung siku. Keuntungan terpenting dari list adalah elemen di dalam list tidak wajib memiliki tipe data yang sama bersama dengan pengindeksan negatif.

Apakah fungsi dari import dalam Python?

import digunakan untuk mengimpor sebagaian isi modul dan bukan keseluruhan isi modul. Bila kita menggunakan format import *, maka semua isi modul akan dimuat. Bedanya dengan format import standar adalah di sini kita dapat menggunakan semua isi modul tanpa menggunakan operator titik.

Apa itu list dalam pemrograman?

2. List dalam Python. Sama seperti Array Python, list merupakan struktur data yang dibangun ke dalam Python untuk menyimpan sekumpulan item yang diapit oleh dua kurung siku. List bersifat mutable atau dapat diubah, dimana kita dapat menambah atau menghapus elemennya.