Notes & software courses · Free to learn
Aph's Blog
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 แล้วหาว่าเหลืออีกกี่วัน