Membuat Python Datetime Object yang Aware terhadap Timezone

Ada kalanya kita membutuhkan object datetime yang aware terhadap timezone di Python. Seperti dalam project saya yang terbaru, klien membutuhkan setting waktu sesuai WIB (+7). Bagaimana caranya?

Konsep yang harus dipahami dalam membuat datetime object adalah is_aware dan is_naive. Umumnya ketika kita membuat object datetime dengan fungsi datetime.now() maka itu termasuk naive datetime, artinya tidak mengenal timezone, sehingga jam ketika kita develop di Indonesia, dengan jam server yang misal di US, akan berbeda. Untuk membuat agar aware, maka object datetime dibuat dengan menggunakan perintah:

from datetime import datetime, timezone

dt_aware_tz = datetime.utcnow().replace(tzinfo=timezone.utc)

Biasanya datetime object ini kita gunakan di database untuk set created atau modified. Langkah berikutnya yang harus dipikirkan adalah bagaimana mengubah data tersebut sesuai dengan local timezone? misal Indonesia? Caranya adalah dengan menggunakan pytz library (3rd party).

import pytz

def convert_time_to_wib(dt_object):
# set timezone ke Jakarta (WIB)
tz = pytz.timezone("Asia/Jakarta")
# tentukan timezone awal (dalam hal ini UTC)
utc = pytz.timezone("UTC")
# convert ke local datetime
tz_aware_dt = utc.localize(dt_object)
local_dt = tz_aware_dt.astimezone(tz)
return local_dt.strftime("%Y-%m-%d %H:%M:%S")

Selesai

Comments

Popular posts from this blog

Adding Image Alternate Text into WordPress Image Attachment using python-wordpress-xmlrpc Library

Keutamaan Tidur yang Sedikit Menurut para Ulama

Kisah Nabi Uzair a.s.