On this page
วันเวลา (datetime)
👋 อ่านฟรีทั้งหมดบน Aph's Blog — เนื้อหาภาษาไทย ทำตามทีละหน้าใน sidebar ได้เลย หากมีข้อเสนอแนะหรืออยากให้เพิ่มหัวข้อไหน บอกได้เสมอ
คำนวณ จัดรูป และแปลงวันเวลาอย่างถูกต้อง พร้อมหลบกับดักเรื่อง timezone
งานจริงเต็มไปด้วยวันเวลา: อายุผู้ใช้, วันหมดอายุ, log timestamp โมดูล datetime จัดการเรื่องพวกนี้ให้ แต่มีกับดักที่ต้องรู้ โดยเฉพาะ timezone
datetime, date, timedelta
python
from datetime import datetime, date, timedelta
now = datetime.now() # วันเวลาปัจจุบัน
today = date.today() # วันที่วันนี้
print(now) # 2026-06-01 10:30:00.123
# สร้างวันที่เจาะจง
birthday = date(2000, 5, 15)
# timedelta = ช่วงเวลา (บวก/ลบได้)
tomorrow = today + timedelta(days=1)
week_ago = today - timedelta(weeks=1)
print(tomorrow)ส่วนต่างของวัน
python
from datetime import date
start = date(2026, 1, 1)
end = date(2026, 6, 1)
diff = end - start # ได้ timedelta
print(diff.days) # 151
# คำนวณอายุคร่าว ๆ
birthday = date(2000, 5, 15)
age_days = (date.today() - birthday).days
print(age_days // 365) # อายุปี (คร่าว ๆ)แปลงข้อความ ↔ วันเวลา (strftime/strptime)
strftime: วันเวลา → ข้อความ (format), strptime: ข้อความ → วันเวลา (parse)
python
from datetime import datetime
now = datetime.now()
# format เป็นข้อความ
print(now.strftime("%d/%m/%Y")) # 01/06/2026
print(now.strftime("%Y-%m-%d %H:%M")) # 2026-06-01 10:30
# parse ข้อความเป็น datetime
d = datetime.strptime("2026-06-01", "%Y-%m-%d")
print(d.year, d.month, d.day) # 2026 6 1| โค้ด | ความหมาย |
|---|---|
| %Y / %m / %d | ปี(4หลัก) / เดือน / วัน |
| %H / %M / %S | ชั่วโมง / นาที / วินาที |
กับดัก timezone
ในระบบจริงที่มีผู้ใช้หลายประเทศ ให้เก็บเวลาเป็น UTC ในฐานข้อมูลเสมอ แล้วค่อยแปลงเป็น timezone ท้องถิ่นตอนแสดงผล — การเก็บเวลาท้องถิ่นปนกันทำให้คำนวณผิดและ debug ยากมาก
สรุปหัวข้อนี้
- datetime.now()/date.today() เวลาปัจจุบัน; timedelta = ช่วงเวลา (บวก/ลบ)
- ลบวันที่กันได้ timedelta — .days บอกจำนวนวัน
- strftime: วันเวลา→ข้อความ, strptime: ข้อความ→วันเวลา
- เก็บเวลาเป็น UTC แสดงผลค่อยแปลง timezone
แบบฝึกหัด
1) คำนวณจำนวนวันระหว่างวันนี้กับวันเกิดคุณ 2) หาว่าอีก 100 วันเป็นวันที่เท่าไร (timedelta) 3) format วันนี้เป็น "วัน/เดือน/ปี" 4) parse ข้อความ "2026-12-31" เป็น date แล้วหาว่าเหลืออีกกี่วัน