Menguasai Modul Datetime pada Python

Python datetime untuk data tanggal dan waktu
Python datetime untuk data tanggal dan waktu

Modul datetime merupakan salah satu pustaka standar python yang berguna untuk mengelola data tanggal dan waktu. Di dalamnya tersedia kelas-kelas untuk merepresentasikan dan mengelola informasi waktu. Selain itu terdapat pula kelas yang memungkinkan kita untuk mengonversi, membandingkan, dan menghitung perbedaan antara tanggal dan waktu.

Berikut ini adalah beberapa kelas dan metode penting yang tersedia pada modul datetime:

  • kelas date: merepresentasikan tanggal (tahun, bulan dan hari) tanpa informasi waktu
  • kelas time: merepresentasikan waktu dalam sehari tanpa informasi tanggal
  • kelas datetime: merepresentasikan tanggal dan waktu bersamaan
  • kelas timedelta: merepresentasikan selisih waktu atau durasi
  • metode strftime(): digunakan untuk mengonversi objek datetime menjadi string sesuai dengan format yang diberikan
  • metode strptime(): digunakan untuk mengonversi string yang berisi tanggal dan waktu ke objek datetime dengan format tertentu
  • kelas tzinfo: kelas abstrak yang digunakan untuk merepresentasikan informasi zona waktu
  • kelas timezone: digunakan untuk merepresentasikan zona waktu dengan offset tetap, seperti “UTC+2” atau “UTC-5”

Mari kita bahas satu per satu kelas dan metode tersebut!

date

Kelas date digunakan untuk merepresentasikan tanggal (tahun, bulan dan hari) tanpa informasi waktu. Objek dari kelas date dapat dibuat dengan menentukan parameter year, month dan day. Secara default semua parameter tersebut memiliki nilai 0.

Metode dan atribut yang terdapat pada kelas date adalah sebagai berikut:

Python

import datetime

print("Membuat objek date:")

# membuat objek date dengan parameter year, month, dan day
my_date = datetime.date(2023, 10, 1)
print(f"- Tanggal yang dibuat: {my_date}")

# menggunakan date.today() untuk mendapatkan tanggal saat ini
today_date = datetime.date.today()
print(f"- Tanggal hari ini: {today_date}")

# membuat objek date dari string dalam format ISO
date_string = "2023-12-31"
iso_date = datetime.date.fromisoformat(date_string)
print(f"- Tanggal dari string ISO: {iso_date}\n")

# membandingkan 2 objek date
print("Perbandingan 2 objek date:")
print(f"- {my_date} < {today_date} -> {my_date < today_date}\n")

# mengakses atribut tanggal, bulan, dan tahun dari objek date
day = today_date.day
month = today_date.month
year = today_date.year

print("Atribut dari objek today_date:")
print(f"- Hari ini adalah tanggal {day} bulan {month} tahun {year}")
# OUTPUT

Membuat objek date:
- Tanggal yang dibuat: 2023-10-01
- Tanggal hari ini: 2023-10-09
- Tanggal dari string ISO: 2023-12-31

Perbandingan 2 objek date:
- 2023-10-01 < 2023-10-09 -> True

Atribut dari objek today_date:
- Hari ini adalah tanggal 9 bulan 10 tahun 2023

time

Kelas time digunakan untuk merepresentasikan waktu dalam sehari tanpa informasi tanggal. Untuk membuat objek time kita dapat menentukan nilai parameter hour, minute, second hingga microsecond. Semua parameter tersebut memiliki nilai default 0.

Metode dan atribut yang terdapat pada kelas time adalah sebagai berikut:

Python

import datetime

# membuat objek time
# parameter: hour, minute, dan second
my_time = datetime.time(13, 30, 45)
print(f"Waktu yang dibuat: {my_time}\n")

# membandingkan 2 objek time
your_time = datetime.time(15, 30)   # second = 0
print(f"{my_time} > {your_time} -> {my_time > your_time}\n")

# Mengakses atribut jam, menit, dan detik
hour = my_time.hour
minute = my_time.minute
second = my_time.second

print("Atribut dari objek current_time:")
print(f"- Saat ini jam {hour} lewat {minute} menit {second} detik")
# OUTPUT

Waktu yang dibuat: 13:30:45

13:30:45 > 15:30:00 -> False

Atribut dari objek current_time:
- Saat ini jam 13 lewat 30 menit 45 detik

datetime

Kelas datetime digunakan untuk membuat data dalam bentuk tanggal dan waktu sekaligus. Kelas ini memungkinkan kita untuk membuat, memanipulasi, dan memformat objek tanggal dan waktu dengan mudah. Adapun parameter yang dapat ditentukan sama seperti kombinasi antara kelas date dan kelas time.

Metode dan atribut yang terdapat pada kelas datetime adalah sebagai berikut:

Python

import datetime

# Membuat dua objek datetime
# year, month, day, hour, minute, second
my_datetime = datetime.datetime(2023, 10, 1, 15, 30, 0)
print(f"my_datetime: {my_datetime}\n")

# Mendapatkan waktu saat ini
current_datetime = datetime.datetime.now() 
print(f"Waktu saat ini: {current_datetime}\n")

# Membandingkan dua objek datetime
print(f"{my_datetime} > {current_datetime} -> {my_datetime > current_datetime}\n")

# Mengakses atribut-atribut dari objek datetime
year = current_datetime.year
month = current_datetime.month
day = current_datetime.day
hour = current_datetime.hour
minute = current_datetime.minute
second = current_datetime.second

print("Atribut dari objek current_datetime:")
print(f"- Saat ini jam {hour} lewat {minute} menit {second} detik")
print(f"- Tanggal {day} bulan {month} tahun {year}\n")

# Mengakses (date) dari objek datetime
date_only = current_datetime.date()
print("- date:", date_only)

# Mengakses (time) dari objek datetime
time_only = current_datetime.time()
print("- time:", time_only)
# OUTPUT

my_datetime: 2023-10-01 15:30:00

Waktu saat ini: 2023-10-09 07:55:28.100816

2023-10-01 15:30:00 > 2023-10-09 07:55:28.100816 -> False

Atribut dari objek current_datetime:
- Saat ini jam 7 lewat 55 menit 28 detik
- Tanggal 9 bulan 10 tahun 2023

- date: 2023-10-09
- time: 07:55:28.100816

timedelta

Kelas timedelta digunakan untuk merepresentasikan jangka waktu atau selisih antara dua titik waktu. Ini memungkinkan kita untuk melakukan perhitungan terkait waktu, seperti penambahan atau pengurangan objek datetime dengan timedelta.

Metode dan atribut yang terdapat pada kelas timedelta adalah sebagai berikut:

Python

import datetime

# Membuat objek timedelta
# parameter: days, hours, minutes, ...
time_period = datetime.timedelta(days=15, hours=12, minutes=0)
print(f">>> Periode waktu tugas: {time_period}\n")

# menghitung end_time berdasarkan start_time + time_period
start_time = datetime.datetime(2023, 10, 1)
end_time = start_time + time_period
print(f">>> start: {start_time}, end: {end_time}\n")

# mengurangi 2 datetime untuk menghitung timedelta
done_time = datetime.datetime(2023, 10, 25, 13, 45, 25)
exceeded_duration = done_time - end_time
print(f">>> Tugas selesai pada {done_time}")
print(f">>> Melewati batas waktu selama {exceeded_duration}\n")

# Mengakses atribut-atribut dari objek timedelta
days = exceeded_duration.days
seconds = exceeded_duration.seconds % 60
minutes = (exceeded_duration.seconds // 60) % 60
hours = (exceeded_duration.seconds // 3600) % 24

print("Attributes objek timedelta:")
print(">>> Days:", days)
print(">>> Hours:", hours)
print(">>> Minutes:", minutes)
print(">>> Seconds:", seconds)
# OUTPUT

Periode waktu tugas: 15 days, 12:00:00

start: 2023-10-01 00:00:00, end: 2023-10-16 12:00:00

Tugas selesai pada 2023-10-25 13:45:00
Melewati batas waktu selama 9 days, 1:45:00

Attributes objek timedelta:
- Days: 9
- Hours: 1
- Minutes: 45
- Seconds: 0

strftime()

Metode strftime digunakan untuk mengubah tanggal dan waktu dalam bentuk objek datetime menjadi string dengan tampilan yang dapat disesuaikan dengan kebutuhan kita.

Format-format yang digunakan selengkapnya dapat dilihat di sini.

Python

import datetime
import locale

date_obj = datetime.date(2023, 10, 1)

# full date format:
full_date = date_obj.strftime("%A, %B %d, %Y")
print(f"Full date        : {full_date}")

# Short Date Format:
short_date = date_obj.strftime("%d/%m/%y")
print(f"Short date       : {short_date}")

# Abbreviated Month Format:
abv_date = date_obj.strftime("%b %d, %Y")
print(f"Abbrevieted date : {abv_date}")

# Set the locale to Indonesian
locale.setlocale(locale.LC_TIME, 'id_ID')

idn_date = date_obj.strftime("%A, %d %B %Y")
print(f"Locale Indonesia : {idn_date}")

# 24-Hour Time Format:
datetime_obj = datetime.datetime(2023, 10, 1, 16, 45, 0)
f24_time = datetime_obj.strftime("%H:%M:%S")
print(f"24-Hour Format   : {f24_time}")

# 12-Hour Time Format with AM/PM:
f12_time = datetime_obj.strftime("%I:%M:%S %p")
print(f"12-Hour Format   : {f12_time}")

# custom
fmt_datetime = datetime_obj.strftime("%a %d-%b-%Y %H:%M:%S")
print(f"Other            : {fmt_datetime}")
# OUTPUT

Full date        : Sunday, October 01, 2023
Short date       : 01/10/23
Abbrevieted date : Oct 01, 2023
Locale Indonesia : Minggu, 01 Oktober 2023
24-Hour Format   : 16:45:00
12-Hour Format   : 04:45:00 PM
Other            : Min 01-Okt-2023 16:45:00

strptime()

strptime() digunakan untuk dan membuat objek datetime dengan mengambil informasi tanggal dan waktu dari string berdasarkan format yang telah ditentukan.

Format-format yang digunakan selengkapnya dapat dilihat di sini.

Python

import datetime
import locale

# Full date format (dd/mm/YYYY)
date_str = "07/10/2023"
date_obj = datetime.datetime.strptime(date_str, "%d/%m/%Y")
print(date_obj)

# Set the locale to Bahasa Indonesia
locale.setlocale(locale.LC_TIME, 'id_ID')

# Date Format with Day in Indonesian Language:
date_str = "Sabtu, 07 Oktober 2023"
date_obj = datetime.datetime.strptime(date_str, "%A, %d %B %Y")
print(date_obj)

# Standard Time Format (HH:MM:SS):
time_str = "2023/10/07, 14:30:00"
time_obj = datetime.datetime.strptime(time_str, "%Y/%m/%d, %H:%M:%S")
print(time_obj)

# Time Format with AM/PM (hh:mm AM/PM):
time_str = "2023/10/07, 02:30 PM"
time_obj = datetime.datetime.strptime(time_str, "%Y/%m/%d, %I:%M %p")
print(time_obj)
# OUTPUT

2023-10-07 00:00:00
2023-10-07 00:00:00
2023-10-07 14:30:00
2023-10-07 14:30:00

tzinfo

Kelas tzinfo merupakan kelas abstrak yang digunakan untuk merepresentasikan data tanggal dan waktu dengan informasi zona waktu. Karena merupakan kelas abstrak, maka kira perlu membuat kelas turunannya dan mengimplementasikan metode utfoffset.

Berikut ini contoh penggunaan tzinfo pada objek datetime:

Python

from datetime import datetime, timedelta, tzinfo

class IdnTimeZone(tzinfo):
    def utcoffset(self, dt):
        # Setting the time offset to UTC+07:00
        return timedelta(hours=7)  

# Creating a datetime object with the custom timezone
custom_time = datetime(2023, 10, 1, 8, 30, tzinfo=IdnTimeZone())

# Displaying the time with the custom timezone
print(custom_time)
# OUTPUT

2023-10-01 08:30:00+07:00

timezone

Kelas timezone merupakan subkelas dari kelas abstrak tzinfo dan dapat digunakan mirip seperti contoh sebelumnya saat kita membuat subkelas sendiri.

Berikut ini contoh penggunaan tzinfo pada objek datetime:

Python

from datetime import datetime, timezone, timedelta

# creating a datetime object with UTC timezone
utc_time = datetime(2023, 10, 1, tzinfo=timezone.utc)

# displaying the time in UTC
print("UTC Time:", utc_time)

# creating a fixed timezone for UTC+07:00
idn_timezone = timezone(timedelta(hours=7))

# creating a datetime object with the custom timezone (UTC+07:00)
idn_time = datetime(2023, 10, 1, tzinfo=idn_timezone)

# displaying the time with the idn timezone
print("Custom Time:", idn_time)
# OUTPUT

UTC Time: 2023-10-01 00:00:00+00:00
Indonesia Time: 2023-10-01 00:00:00+07:00

Tulisan Lainnya

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Isi