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

Kan Ouivirach
odds.team
Published in
2 min readNov 20, 2021

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

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

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

pip install pendulum

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

from datetime import datetimeimport 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

งดงามเนอะ 😊

ตอนนี้ Data Engineer Cafe มี Cafe ที่เป็นแนว Forum เปิดให้ทุกคนเข้าไปพูดคุยกันนะครับ ถ้าติดปัญหาอะไร ควรใช้เครื่องมือตัวไหน แบ่งปันประสบการณ์ หรือแม้กระทั่งลองหางานจากบริษัทต่างๆ ที่น่าสนใจ ไปร่วมวงกันได้นะ 👇

แล้วเจอกันครับ 😙

--

--

Kan Ouivirach
odds.team

Data Craftsman. Passionate in software engineering, data engineering, and data science. ♥