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