15%

Memanipulasi Waktu Lokal dengan UTC pada Python

01-May-2021

Setiap aplikasi sangat erat dengan waktu, mulai dari aplikasi sederhana hingga yang kompleks. Sebagai contoh aplikasi yang menyediakan formulir inputan hingga perhitungan rentang waktu tertentu.

Python sudah menyediakan module class Datetime untuk memanipulasi hal tersebut. Diartikel ini akan dijelaskan secara umum penerapan waktu lokal dan UTC agar kita dapat memutuskan mana yang sesuai untuk aplikasi yang akan kita kerjakan.

 

Zona Waktu

ketika aplikasi yang akan kita kerjakan hanya bersifat lokal ataupun hanya akan digunakan pada satu zona waktu maka penerapan waktu lokal sudah memenuhi kebutuhan yang kita inginkan.
sebagai contoh lihat kode berikut:

>>> from datetime import datetime

>>> now = datetime.now()

>>> print(now)
2021-05-01 20:27:51.725037

 

Waktu yang dihasilkan dari kode diatas adalah waktu lokal komputer saya dan hasil akan berbeda ketika Anda jalankan karena kode diatas menghasilkan waktu saat datetime.now() diinisiasi.


Sebagai contoh bayangkan kita membuat aplikasi dengan formulir registrasi dan hasilnya akan kita simpan ke database.


Seseorang melakukan registrasi pada tanggal 1 mei 2021 jam 10.00 waktu Indonesia barat. Ketika kita tampilkan kepengguna di zona waktu yang sama tentu tidak akan menjadi masalah.


Tapi bagaimana jika kita tampilkan kepengguna yang berada di zona waktu Asia/Jayapura atau lainnya, Tentu waktu yang kita tampilkan tidak sesuai dengan yang diharapkan. karena di Jayapura terjadi perbedaan waktu 2 jam dengan lokal server (waktu Indonesia Barat).

>>> from pytz import timezone

>>> wib = timezone('Asia/Jakarta')

>>> loc_server = wib.localize(now)

>>> print(loc_server)
2021-05-01 20:27:51.725037+07:00

# konversi ke zona waktu jayapura

>>> loc_jayapura = loc_server.astimezone(timezone('Asia/Jayapura'))
>>> print(loc_jayapura)
2021-05-01 22:27:51.725037+09:00

 

Hal ini semakin rumit ketika pengguna dari berbagai zona waktu berbeda, kita harus mendapatkan informasi zona waktu pengguna untuk kita konversi seperti contoh diatas.

Untungnya jika aplikasi menggunakan browser, kita bisa mendapatkan informasi zona waktu pengunjung dengan mudah. getTimezoneOffset() atau momentjs sudah dapat memenuhi apa yang kita inginkan.

Masalah diatas terselesaikan dengan bantuan javascript, kita tinggal memilih datetime dikonversi di python atau javascript, umumnya developer memilih merender dengan javascript.


Datetime UTC

Bagaimana jika server database karena suatu hal harus dipindahkan ke lokasi zona waktu yang berbeda? 
Jika ada pengguna baru (Zona Asia Pasifik) mendaftar setelah kita migrasi database/server ke zona waktu yang baru, maka waktu yang ada di database menjadi tidak sinkron, karena ada beberapa waktu(datetime) pada database dengan zona waktu server sebelum migrasi.


Tentu saja pengguna baru akan melihat waktu yang sesuai jika dia hanya melihat data(waktu) yang melakukan registrasi di zona asia pasifik. Bagaimana dengan data-data sebelumnya (pada saat sebelum migrasi).  
Solusinya adalah dengan mengganti seluruh datetime pada database ke database setelah migrasi server. Tentu sangat merepotkan jika harus mengganti seluruh isi datetime pada database ke zona waktu baru.

Pendekatan yang lebih efisien adalah dengan waktu universal yaitu UTC. Dengan UTC waktu yang dihasilkan akan selalu sama diberbagai belahan dunia, Sebagai contoh

>>> now_utc = datetime.utcnow()
>>> print(now_utc)
2021-05-01 14:40:41.578993

#konversi ke asia/jakarta

>>> loc_wib = now_utc.astimezone(timezone('Asia/jakarta'))
>>> print(loc_wib)
2021-05-01 14:40:41.578993+07:00

 

Hasil print/output dari variabel loc_wib terdapat +07:00 pada bagian akhir yang menandakan HH:MM artinya waktu indonesia barat lebih cepat 7 jam dari UTC

Dengan UTC kita tidak direpotkan mengatur zona waktu ketika harus migrasi server ke zona waktu yang berbeda. Dan dari sisi client (javascript) tentu lebih mudah untuk melakukan konversi karena setiap waktu (datetime) memiliki format yang sama.

Topik : python
Similar Posts

Komentar (0)

Tinggalkan Komentar