การจัดการวันที่ใน Python

การจัดการวันที่ใน Python

บทความนี้อธิบายการจัดการวันที่ใน Python

YouTube Video

การจัดการวันที่ใน Python

การจัดการวันที่ใน Python โดยหลักจะใช้โมดูล datetime โมดูลนี้จัดเตรียมคลาสและฟังก์ชันต่าง ๆ สำหรับจัดการวันที่และเวลา

ด้านล่างคือบางตัวอย่างของการจัดการวันที่พื้นฐานโดยใช้โมดูล datetime

การดึงวันที่และเวลา

คุณสามารถรับวันที่และเวลาปัจจุบันได้ดังนี้ datetime.now() และ datetime.today() ให้ผลลัพธ์เกือบเหมือนกัน แต่มีความแตกต่างกันในการจัดการกับเขตเวลา

1from datetime import datetime
2
3# Get the current date and time
4now = datetime.now()
5print(f"Current date and time: {now}")
6
7# Get today's date only
8today = datetime.today()
9print(f"Today's date: {today.date()}")
  • โค้ดนี้จะดึงและแสดงวันที่และเวลาปัจจุบัน รวมถึงวันที่ของวันนี้เท่านั้น

การสร้างวันที่และเวลาที่กำหนดเฉพาะ

คุณสามารถสร้างวันที่และเวลาที่ระบุได้ดังนี้

1from datetime import datetime
2
3# Create a specific date and time
4specific_date = datetime(2023, 11, 7, 10, 30, 45)
5print(f"Specified date and time: {specific_date}")
  • โค้ดนี้จะสร้างและแสดงวันที่และเวลาที่กำหนดไว้ (7 พฤศจิกายน 2023, 10:30:45)

การจัดรูปแบบวันที่

การจัดรูปแบบวันที่สามารถทำได้ดังนี้

1from datetime import datetime
2
3now = datetime.now()
4
5# Format the date
6formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
7print(f"Formatted date and time: {formatted_date}")
  • โค้ดนี้จะดึงวันที่และเวลาปัจจุบัน จัดรูปแบบตามรูปแบบที่ระบุด้วย strftime และแสดงผล

รูปแบบสตริงของวันที่

  • %Y: ปี (4 หลัก)
  • %m: เดือน (01 ถึง 12)
  • %d: วัน (01 ถึง 31)
  • %H: ชั่วโมง (00 ถึง 23)
  • %M: นาที (00 ถึง 59)
  • %S: วินาที (00 ถึง 59)

การแปลงข้อความวันที่

คุณสามารถแปลงข้อความที่แสดงถึงวันที่ให้เป็นอ็อบเจ็กต์ datetime ได้

1from datetime import datetime
2
3date_string = "2023-11-07 10:30:45"
4parsed_date = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
5print(f"Parsed date and time: {parsed_date}")
  • โค้ดนี้จะแปลงวันที่ที่อยู่ในรูปแบบข้อความให้เป็นอ็อบเจ็กต์ datetime ด้วย strptime() และแสดงผล

การคำนวณวันที่

สามารถคำนวณวันที่ได้ดังนี้

 1from datetime import datetime, timedelta
 2
 3now = datetime.now()
 4
 5# Date for one day later
 6tomorrow = now + timedelta(days=1)
 7print(f"Date for one day later: {tomorrow}")
 8
 9# Date for one week ago
10last_week = now - timedelta(weeks=1)
11print(f"Date for one week ago: {last_week}")
12
13# Time for two hours later
14in_two_hours = now + timedelta(hours=2)
15print(f"Time for two hours later: {in_two_hours}")
  • โค้ดนี้จะใช้ timedelta เพื่อบวกหรือลบวันและเวลาจากวันที่และเวลาปัจจุบัน โดยคำนวณและแสดงวันที่และเวลาสำหรับวันพรุ่งนี้ เมื่อสัปดาห์ที่แล้ว และอีกสองชั่วโมงข้างหน้า

การจัดการเขตเวลา

คุณสามารถจัดการกับเขตเวลาด้วยโมดูล datetime ได้เช่นกัน

 1from datetime import datetime, timezone, timedelta
 2
 3# Current UTC time
 4utc_now = datetime.now(timezone.utc)
 5print(f"Current UTC time: {utc_now}")
 6
 7# JST (UTC+9)
 8jst = timezone(timedelta(hours=9))
 9jst_now = datetime.now(jst)
10print(f"Current JST time: {jst_now}")
  • datetime จะส่งคืน 'naive datetime' (ไม่มีข้อมูลเขตเวลา) เป็นค่าเริ่มต้น คุณสามารถจัดการเขตเวลาอย่างชัดเจนได้โดยใช้คลาส timezone หรือ zoneinfo

คลาส date และคลาส time

กับโมดูล datetime คุณยังสามารถจัดการเฉพาะวันที่หรือเวลาได้เช่นกัน

1from datetime import date, time
2
3d = date(2023, 11, 7)
4t = time(10, 30, 45)
5
6print(f"Date only: {d}")
7print(f"Time only: {t}")
  • คลาส date จะจัดการเฉพาะวันที่ และคลาส time จะจัดการเฉพาะเวลา

การแปลงระหว่าง datetime กับ timestamp

สามารถแปลงระหว่าง UNIX timestamp กับอ็อบเจ็กต์ datetime ได้ ที่นี่ UNIX timestamp หมายถึงจำนวนวินาทีที่ผ่านมาตั้งแต่วันที่ 1 มกราคม 1970

 1from datetime import datetime
 2
 3now = datetime.now()
 4
 5# datetime → timestamp
 6timestamp = now.timestamp()
 7print(f"Timestamp: {timestamp}")
 8
 9# timestamp → datetime
10restored = datetime.fromtimestamp(timestamp)
11print(f"Restored datetime: {restored}")
  • โค้ดนี้จะแปลงวันที่และเวลาปัจจุบันเป็น UNIX timestamp จากนั้นใช้ฟังก์ชัน fromtimestamp() เพื่อแปลง timestamp กลับเป็นอ็อบเจ็กต์ datetime

ข้อผิดพลาดที่พบบ่อย

เมื่อใช้โมดูล datetime ควรระวังประเด็นต่อไปนี้

  • datetime.now() จะไม่พิจารณาเขตเวลา ดังนั้นสำหรับการใช้งานหลายประเทศ คุณต้องระบุ timezone.utc อย่างชัดเจน
  • ระวังอย่าสับสนระหว่าง %m (เดือน) และ %M (นาที) เมื่อตั้งค่ารูปแบบสตริง

สรุป

โมดูล datetime ยังมีฟีเจอร์อื่น ๆ อีกมากมายสำหรับการจัดการวันที่และเวลาอย่างยืดหยุ่น นอกจากนี้ ยังมีคลาสเช่น date, time และ timedelta ที่เชี่ยวชาญสำหรับการปฏิบัติการเฉพาะทาง

การใช้ไลบรารีอื่น ๆ ยังช่วยให้สามารถจัดการวันที่ขั้นสูงได้อีกด้วย ตัวอย่างเช่น pandas เชี่ยวชาญในการจัดการข้อมูลอนุกรมเวลา ขณะที่ dateutil เหมาะสำหรับการแยกวิเคราะห์วันที่ที่ซับซ้อน ยิ่งไปกว่านั้น ไลบรารี arrow ก็มีประโยชน์มากเช่นกัน

คุณสามารถติดตามบทความข้างต้นโดยใช้ Visual Studio Code บนช่อง YouTube ของเรา กรุณาตรวจสอบช่อง YouTube ด้วย

YouTube Video