ใช้ Pendulum จัดการ Date Time ใน Python

เชื่อว่าทุกๆ คนที่ทำงานด้านข้อมูล หรือด้านพัฒนาซอฟต์แวร์ ก็จะต้องมีการจัดการข้อมูลพวกวันเวลา (datetime) อะไรพวกนี้กันอยู่ตลอดเนอะ


Photo by Sonja Langford on Unsplash

โพสต์นี้อยากจะมาแนะนำ Pendulum ครับ เป็น Python library ที่จะมาช่วยเราจัดการ datetime ได้สะดวกสบายมากขึ้น แล้วก็มี data tools หลายๆ ตัว เช่น Airflow ใช้อยู่ด้วย เราไปลองดูความสามารถเบื้องต้นของมันกัน :wink:

ก่อนอื่นเราต้องติดตั้งตัว library นี้ก่อน

pip install pendulum

เราสามารถสร้าง datetime object โดยใช้ Pendulum สร้างได้เลย

from datetime import datetime

import pendulum


dt = pendulum.datetime(2021, 11, 19)
print(isinstance(dt, datetime))
print(dt)

ผลที่ได้จะประมาณนี้

True
2021-11-19T00:00:00+00:00

ก็คือสิ่งที่ Pendulum สร้างมาคือ Python datetime object นั่นเอง และพอเรา print ออกมาหน้าตาก็จะได้ประมาณอย่างที่เห็นด้านบน

ทีนี้ปัญหาที่เรายุ่งด้วยบ่อยๆ ก็น่าจะเป็นเรื่อง Timezone เนอะ เราสามารถใช้ library ตัวนี้ปรับเปลี่ยน Timezone ได้ตามใจชอบเลย

dt_helsinki = pendulum.datetime(2021, 11, 19, tz="Europe/Helsinki")
print(f"Date Time in Helsinki: {dt_helsinki}")

dt_bangkok = pendulum.datetime(2021, 11, 19, 20, 0, 0, tz="Asia/Bangkok")
print(f"Date Time in Bangkok: {dt_bangkok}")

dt_bangkok_in_sg = dt_bangkok.in_tz("Singapore")
print(f"Date Time Bangkok in Singapore: {dt_bangkok_in_sg}")

dt_bangkok_in_us_eastern = dt_bangkok.in_tz("US/Eastern")
print(f"Date Time in Bangkok in US/Eastern: {dt_bangkok_in_us_eastern}")

ผลที่ได้ก็ตามนี้

Date Time in Helsinki: 2021-11-19T00:00:00+02:00
Date Time in Bangkok: 2021-11-19T20:00:00+07:00
Date Time Bangkok in Singapore: 2021-11-19T21:00:00+08:00
Date Time in Bangkok in US/Eastern: 2021-11-19T08:00:00-05:00

ดูดีเลยทีเดียว โค้ดดูสวยงาม อ่านง่ายด้วย :star_struck:

อีกปัญหาหนึ่งก็คือเรื่องการหาความต่างของ datetime 2 ค่า ซึ่งเราสามารถใช้เมธอด diff ได้เลย

diff = dt_bangkok.diff(dt_helsinki)
print(f"Diff in Days: {diff.in_days()}")
print(f"Diff in Hours: {diff.in_hours()}")
print(f"Diff in Minutes: {diff.in_minutes()}")
print(f"Diff in Seconds: {diff.in_seconds()}")

ผลลัพธ์

Diff in Days: 0
Diff in Hours: 15
Diff in Minutes: 900
Diff in Seconds: 54000

อีกสักเรื่องละกัน เป็นเรื่องของ format จาก string เป็น datetime แล้วก็ดูผลต่างที่แสดงในรูปแบบที่เรามักจะเห็นบนหน้าเว็บ เช่น 5 minutes ago อะไรแบบนี้

dt = pendulum.from_format("2021-11-19 20:11:00", "YYYY-MM-DD HH:mm:ss")
print(dt.diff_for_humans())

จากโค้ดด้านบน dt จะเป็น datetime object ที่แปลงมาจาก string และผลที่ได้จากเมธอด diff_for_humans ก็ตามนี้

in 6 hours

งดงามเนอะ :blush:

1 Like

เราสามารถแปลง datetime ปกติให้เป็นแบบ Pendulum ได้โดยใช้ instance() ตามนี้

import datetime as dt


now = dt.datetime.now()
# datetime.datetime(2021, 12, 1, 14, 9, 27, 162482)

pendulum.instance(now)
# DateTime(2021, 12, 1, 14, 9, 27, 162482, tzinfo=Timezone('UTC'))