ใช้ Pendulum จัดการ Date Time ใน Python
เชื่อว่าทุกๆ คนที่ทำงานด้านข้อมูล หรือด้านพัฒนาซอฟต์แวร์ ก็จะต้องมีการจัดการข้อมูลพวกวันเวลา (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 เปิดให้ทุกคนเข้าไปพูดคุยกันนะครับ ถ้าติดปัญหาอะไร ควรใช้เครื่องมือตัวไหน แบ่งปันประสบการณ์ หรือแม้กระทั่งลองหางานจากบริษัทต่างๆ ที่น่าสนใจ ไปร่วมวงกันได้นะ 👇
แล้วเจอกันครับ 😙