เขตเวลาด้วย zoneinfo
ทำงานกับ datetime ที่มีข้อมูลเขตเวลา
เขตเวลาด้วย zoneinfo เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
วันเวลาแบบไม่มีเขตเวลาเทียบกับแบบมีเขตเวลา
วันเวลาแบบไม่มีเขตเวลาไม่มีข้อมูลเขตเวลา โดยบอกเพียงว่า 'บ่าย 2 โมง' แต่ไม่ทราบว่าเป็นบ่าย 2 โมงของที่ใด ส่วนวันเวลาแบบมีเขตเวลาจะมีเขตเวลากำกับ จึงระบุช่วงเวลาที่แน่นอนบนโลกได้
วันเวลาแบบมีเขตเวลาช่วยป้องกันข้อผิดพลาดเมื่อผู้ใช้อยู่คนละภูมิภาคกัน
from datetime import datetime
naive = datetime(2026, 5, 30, 14, 0)
print(naive.tzinfo)การนำเข้า zoneinfo
ไพธอน 3.9 ขึ้นไปมี zoneinfo ในไลบรารีมาตรฐาน ให้ นำเข้า ZoneInfo แล้วส่งชื่อเขตเวลา IANA เช่น 'Europe/Istanbul' หรือ 'America/New_York'
from zoneinfo import ZoneInfo
tz = ZoneInfo('Europe/Istanbul')
print(tz)การสร้างวันเวลาแบบมีเขตเวลา
ส่ง tzinfo=ZoneInfo(...) ขณะสร้างวันเวลาเพื่อทำให้เป็นวันเวลาแบบมีเขตเวลา จากนั้นวันเวลาจะทราบอย่างแน่ชัดว่าอยู่ในภูมิภาคใด
from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print(d)
print(d.tzinfo)ใช้ UTC เป็นจุดอ้างอิง
UTC เป็นจุดอ้างอิงสากล ใช้ datetime.now(ZoneInfo('UTC')) เพื่อรับเวลาปัจจุบันแบบมีเขตเวลาใน UTC แนวปฏิบัติที่ดีที่สุดคือจัดเก็บเวลาเป็น UTC
from datetime import datetime
from zoneinfo import ZoneInfo
utc_now = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
print(utc_now)การแปลงระหว่างเขตเวลา
.astimezone(tz) จะแปลงวันเวลาแบบมีเขตเวลาไปเป็นเขตเวลาอื่น โดยปรับเวลาในนาฬิกาให้ยังระบุช่วงเวลาเดียวกัน
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
ist = utc.astimezone(ZoneInfo('Europe/Istanbul'))
print('UTC:', utc)
print('Istanbul:', ist)ช่วงเวลาเดียวกัน แต่นาฬิกาต่างกัน
หลังการแปลง ตัวเลขเวลาที่แสดงบนหน้าปัดจะแตกต่างกัน แต่ช่วงเวลาพื้นฐานยังเหมือนเดิม การเปรียบเทียบวันเวลาแบบมีเขตเวลาสองรายการจะเปรียบเทียบช่วงเวลาจริง ไม่ใช่ตัวเลขที่แสดง
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
ny = utc.astimezone(ZoneInfo('America/New_York'))
print(utc == ny)การอ่านส่วนต่างจาก UTC
เมธอด .utcoffset() จะคืนค่า timedelta ที่แสดงว่าเขตเวลานั้นต่างจาก UTC อยู่เท่าใดในช่วงเวลานั้น รวมถึงการปรับเวลาออมแสงด้วย
from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print('Offset:', d.utcoffset())จัดการเวลาออมแสงให้โดยอัตโนมัติ
zoneinfo ใช้ฐานข้อมูลเขตเวลาของระบบ จึงทราบว่าเวลาออมแสงเริ่มต้นและสิ้นสุดเมื่อใด เขตเวลาเดียวกันอาจมีส่วนต่างจาก UTC ต่างกันในแต่ละช่วงของปี
from datetime import datetime
from zoneinfo import ZoneInfo
winter = datetime(2026, 1, 15, 12, 0, tzinfo=ZoneInfo('America/New_York'))
summer = datetime(2026, 7, 15, 12, 0, tzinfo=ZoneInfo('America/New_York'))
print('Winter:', winter.utcoffset())
print('Summer:', summer.utcoffset())การกำหนดเขตเวลาให้เวลาที่ไม่มีเขตเวลา
หากวันเวลาแบบไม่มีเขตเวลาแทนเวลาท้องถิ่นที่ทราบแน่ชัด ให้กำหนดเขตเวลาด้วย .replace(tzinfo=...) วิธีนี้จะติดป้ายกำกับเขตเวลาโดยไม่เลื่อนเวลาในนาฬิกา
from datetime import datetime
from zoneinfo import ZoneInfo
naive = datetime(2026, 5, 30, 9, 0)
aware = naive.replace(tzinfo=ZoneInfo('Europe/Istanbul'))
print(aware)หลีกเลี่ยงการผสมวันเวลาแบบต่างกัน
คุณไม่สามารถลบหรือเปรียบเทียบวันเวลาแบบไม่มีเขตเวลากับวันเวลาแบบมีเขตเวลาได้ ไพธอนจะส่งข้อผิดพลาด TypeError ดังนั้นควรใช้วันเวลาในรูปแบบเดียวกันตลอดทั้งโปรแกรม
from datetime import datetime
from zoneinfo import ZoneInfo
naive = datetime(2026, 5, 30, 9, 0)
aware = datetime(2026, 5, 30, 9, 0, tzinfo=ZoneInfo('UTC'))
try:
print(aware - naive)
except TypeError as e:
print('Error:', e)การจัดรูปแบบพร้อมเขตเวลา
รหัส %Z จะแสดงชื่อเขตเวลา และ %z จะแสดงส่วนต่างในรูปตัวเลขเมื่อคุณจัดรูปแบบวันเวลาแบบมีเขตเวลา
from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print(d.strftime('%Y-%m-%d %H:%M %Z %z'))ตรวจสอบความเข้าใจ
ความแตกต่างสำคัญระหว่างวันเวลาแบบไม่มีเขตเวลากับแบบมีเขตเวลาคืออะไร
ทบทวน: เขตเวลาด้วย zoneinfo
สรุป:
- วันเวลาแบบไม่มีเขตเวลาขาดข้อมูลเขตเวลา ส่วนวันเวลาแบบมีเขตเวลาจะมี
tzinfoกำกับ - ใช้
ZoneInfo('Region/City')จากโมดูลzoneinfo .astimezone()แปลงวันเวลาแบบมีเขตเวลาไปยังเขตเวลาอื่นzoneinfoจัดการเวลาออมแสงโดยอัตโนมัติ และไม่ควรผสมวันเวลาแบบไม่มีเขตเวลากับแบบมีเขตเวลา
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 12, 0, tzinfo=ZoneInfo('UTC'))
print(utc.astimezone(ZoneInfo('Europe/Istanbul')))คำถามที่พบบ่อย
บทเรียน “เขตเวลาด้วย zoneinfo” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เขตเวลาด้วย zoneinfo” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เขตเวลาด้วย zoneinfo”
ทำงานกับ datetime ที่มีข้อมูลเขตเวลา คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “เขตเวลาด้วย zoneinfo” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- date, time, datetime
- Timedelta และการคำนวณ
- การจัดรูปแบบและการแยกวิเคราะห์
- เขตเวลาด้วย zoneinfo