0Pricing
Python Academy · บทเรียน

เขตเวลาด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. date, time, datetime
  2. Timedelta และการคำนวณ
  3. การจัดรูปแบบและการแยกวิเคราะห์
  4. เขตเวลาด้วย zoneinfo
← กลับไปที่ Python Academy