การจัดการวันที่ใน 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 ด้วย