ในการจัดการวันที่และเวลาใน python มีโมดูลที่เรียกว่า datetime มีวัตถุวันที่และเวลาสองประเภท ประเภทนี้ไร้เดียงสาและมีสติ
ในวัตถุไร้เดียงสา ไม่มีข้อมูลเพียงพอที่จะระบุตำแหน่งวัตถุนี้จากวัตถุวันที่-เวลาอื่นๆ ได้อย่างชัดเจน ในวิธีนี้จะใช้ Coordinate Universal Time (UTC)
ในอ็อบเจ็กต์ประเภทที่รับรู้ มีข้อมูลที่แตกต่างกันเกี่ยวกับการปรับเวลาอัลกอริธึมและการเมือง วัตถุประเภทนี้ใช้เพื่อแสดงช่วงเวลาเฉพาะบางช่วงเวลา
ในการใช้โมดูลนี้ เราควรนำเข้าโดยใช้ −
import datetime
โมดูลนี้มีคลาส ค่าคงที่ และวิธีการที่แตกต่างกัน
ค่าคงที่คือ −
ซีเนียร์ | ค่าคงที่ &คำอธิบาย |
---|---|
1 | datetime.MINYEAR เป็นตัวเลขปีที่น้อยที่สุด ซึ่งสามารถใช้เป็นวัตถุวันที่หรือวันที่และเวลาได้ ค่าคือ 0 |
2 | datetime.MAXYEAR เป็นตัวเลขปีที่ใหญ่ที่สุด ซึ่งสามารถใช้เป็นวัตถุวันที่หรือวันที่และเวลาได้ มูลค่า 9999 |
ประเภทข้อมูลที่มีอยู่คือ −
ซีเนียร์ | ประเภทข้อมูลและคำอธิบาย |
---|---|
1 | วันที่ เป็นวัตถุประเภทวันที่ มันใช้ปฏิทินเกรกอเรียน มีคุณลักษณะปี เดือน วัน |
2 | เวลา เป็นคลาสอ็อบเจ็กต์เวลา เป็นอิสระจากวันใดวันหนึ่ง มีแอตทริบิวต์ชั่วโมง นาที วินาที ไมโครวินาที และ tzinfo |
3 | วันที่และเวลา เป็นชุดวันที่และเวลารวมกัน |
4 | ไทม์เดลต้า ใช้เพื่อแสดงความแตกต่างระหว่างค่าวันที่ เวลา หรือวันที่เวลาสองค่าในหน่วยมิลลิวินาที |
5 | tzinfo เป็นคลาสพื้นฐานที่เป็นนามธรรม มันเก็บข้อมูลเขตเวลา ใช้โดยคลาสวันที่และเวลา |
6 | เขตเวลา ในคลาสนี้ จะใช้งาน tzinfo มีออฟเซ็ตคงที่จาก UTC |
วัตถุประเภทวันที่
วัตถุวันที่แสดงถึงวันที่ ในวันที่มีวันเดือนและปี มันใช้ปฏิทินเกรกอเรียน ตามปฏิทินนี้ วันที่ 1 มกราคม ของปี 1 เรียกว่าเป็นวันที่ 1 เป็นต้น
วิธีการที่เกี่ยวข้องกับวันที่บางวิธีคือ −
วิธีการ date.date(ปี เดือน วัน)
นี่คือตัวสร้างเพื่อสร้างวัตถุประเภทวันที่ ในการสร้างวันที่ อาร์กิวเมนต์ทั้งหมดจะต้องเป็นข้อมูลประเภทจำนวนเต็ม ปีต้องอยู่ในช่วง MINYEAR &MAXYEAR หากวันที่ที่ระบุไม่ถูกต้อง มันจะเพิ่ม ValueError
เมธอด date.today()
วิธีนี้ใช้เพื่อส่งคืนวันที่ท้องถิ่นปัจจุบัน
เมธอด date.fromtimestamp(timestamp)
วิธีนี้ใช้เพื่อรับวันที่จากการประทับเวลา POSIX หากค่าการประทับเวลาอยู่นอกช่วง จะทำให้เกิด OverflowError
วิธีการ date.fromordinal(ลำดับ)
วิธีนี้ใช้เพื่อรับวันที่จากลำดับปฏิทินเกรกอเรียนที่มีอาการป่วย ใช้เพื่อรับวันที่นับจากวันที่นับจากวันที่ 1 มกราคมของปี 1
เมธอด date.toordinal()
วิธีนี้ใช้เพื่อส่งกลับวันที่ไปยังลำดับปฏิทินเกรกอเรียนที่มีปัญหา
วิธีการ date.weekday()
วิธีนี้ใช้เพื่อส่งคืนวันที่ในสัปดาห์เป็นจำนวนเต็มจากวันที่ วันจันทร์คือ 0, วันอังคารคือ 1 เป็นต้น
เมธอด date.isoformat()
วิธีนี้ใช้เพื่อส่งคืนวันที่เป็นสตริงรูปแบบ ISO 8601 รูปแบบคือ ปปปป-ดด-วว
โค้ดตัวอย่าง
import datetime as dt new_date = dt.date(1998, 9, 5) #Store date 5th septemberm, 1998 print("The Date is: " + str(new_date)) print("Ordinal value of given date: " + str(new_date.toordinal())) print("The weekday of the given date: " + str(new_date.weekday())) #Monday is 0 my_date = dt.date.fromordinal(732698) #Create a date from the Ordinal value. print("The Date from ordinal is: " + str(my_date)) td = my_date - new_date #Create a timedelta object print('td Type: ' + str(type(td)) + '\nDifference: ' + str(td))
ผลลัพธ์
The Date is: 1998-09-05 Ordinal value of given date: 729637 The weekday of the given date: 5 The Date from ordinal is: 2007-01-22 td Type: <class 'datetime.timedelta'> Difference: 3061 days, 0:00:00
วัตถุเวลา
วัตถุเวลาแสดงถึงเวลาท้องถิ่น ในช่วงเวลาที่มีชั่วโมง นาที วินาที ไมโครวินาที ส่วน tzinfo ชั่วโมงจะอยู่ในช่วง 0 ถึง 24 นาทีและวินาทีจะอยู่ในช่วง 0 ถึง 60 และไมโครวินาทีจะอยู่ในช่วง 0 ถึง 1000000
วิธีการที่เกี่ยวข้องกับเวลาบางวิธีคือ
วิธี time.fromisoformat(time_string)
วิธีนี้ใช้เพื่อรับเวลาจากสตริง ISO 8601 สามารถใช้ผลลัพธ์ของ time.isoformat() ก็ได้
วิธี time.replace (ชั่วโมง =self.hour, นาที =self.minute, วินาที =self.second, microsecond =self.microseconds, tzinfo =self.tzinfo, *fold=0)
วิธีนี้ใช้เพื่อย้อนเวลาโดยใช้ค่าจากอาร์กิวเมนต์ หากไม่มีการส่งผ่านอาร์กิวเมนต์ มันจะคืนค่าออบเจ็กต์เวลาเดียวกัน
วิธี time.tzname()
วิธีนี้ใช้เพื่อส่งคืนชื่อของเขตเวลา หาก tzinfo เป็น None มันจะคืนค่า None
วัตถุวันที่
วัตถุ datetime ถือทั้งวันที่และเวลา ในฐานะที่เป็นวัตถุวันที่ สนับสนุนปฏิทินเกรกอเรียนและเป็นวัตถุเวลาจะเก็บ 3600*24 วินาทีในแต่ละวันพอดี
รองรับวิธีการที่เกี่ยวข้องกับวันที่และเวลาทั้งหมด บางวิธีก็มีสำหรับ datetime ด้วย เหล่านี้เป็นเหมือน −
วิธีการ datetime.now(tz=None)
วิธีนี้ใช้เพื่อรับวันที่และเวลาปัจจุบัน หากไม่มี tz อยู่หรือไม่มี ระบบจะส่งกลับวันที่เหมือนเมธอด today()
เมธอด datetime.utcnow()
วิธีนี้ใช้เพื่อรับข้อมูลที่เกี่ยวข้องกับวันที่และเวลา UTC ปัจจุบัน
มีอีกสองวิธีที่เรียกว่า strftime() และ strptime() เมธอดเหล่านี้ใช้ได้กับทั้งออบเจ็กต์วันที่และเวลา ตลอดจนออบเจ็กต์วันที่และเวลา
วิธีการ datetime.strftime(รูปแบบ[, t])
เมธอด strftime() แปลง tuple หรือ struct_time แทนเวลาที่ส่งคืนโดย gmtime() หรือ localtime() เป็นสตริงตามที่ระบุโดยอาร์กิวเมนต์รูปแบบ หากไม่ระบุ t เวลาปัจจุบันที่ส่งคืนโดย localtime() จะถูกใช้ รูปแบบต้องเป็นสตริง ข้อยกเว้น ValueError จะปรากฏขึ้นหากมีฟิลด์ใดใน t อยู่นอกช่วงที่อนุญาต
วิธีการ datetime.strftime(รูปแบบ[, t])
เมธอด strptime() จะแยกวิเคราะห์สตริงที่แสดงเวลาตามรูปแบบ ค่าที่ส่งคืนคือ struct_time ที่ส่งคืนโดย gmtime() หรือ localtime() พารามิเตอร์รูปแบบใช้คำสั่งเดียวกันกับที่ใช้โดย strftime(); ค่าเริ่มต้นคือ "%a %b %d %H:%M:%S %Y" ซึ่งตรงกับการจัดรูปแบบที่ส่งคืนโดย ctime()
ทั้งสองวิธีนี้ใช้คำสั่งบางอย่าง บางส่วนมีการระบุไว้ด้านล่าง −
ซีเนียร์ | แนวทางและคำอธิบาย |
---|---|
1 | %A ชื่อเต็มวันทำงาน |
2 | %B ชื่อเดือนเต็ม |
3 | %d วันของเดือน (0 ถึง 31) |
4 | %S ที่สอง |
5 | %G ปี 4 หลัก ตรงกับหมายเลขสัปดาห์ ISO |
6 | %m เดือน (1 ถึง 12) |
7 | %M นาที |
8 | %T เวลาปัจจุบัน เท่ากับ %H:%M:%S |
9 | %W หมายเลขสัปดาห์ของปีปัจจุบัน โดยเริ่มจากวันจันทร์แรกเป็นวันแรกของสัปดาห์แรก |
10 | %w วันในสัปดาห์เป็นทศนิยม วันอาทิตย์=0 |
11 | %Y ปีรวมทั้งศตวรรษ |
12 | %Z หรือ %z เขตเวลาหรือชื่อหรือตัวย่อ |
โค้ดตัวอย่าง
import datetime as dt my_date1 = dt.datetime(2015, 1, 4) #Storing the date 4th Jan, 2015 print(my_date1) print('The Weekday of that day was: ' + my_date1.strftime('%A')) my_date2 = dt.datetime.strptime('August-15-2017', '%B-%d-%Y') #Storing the date 15th Aug, 2017 print(my_date2) print('The Weekday of that day was: ' + my_date2.strftime('%A')) print('The difference between two days: ' + str(abs(my_date1 - my_date2)))
ผลลัพธ์
2015-01-04 00:00:00 The Weekday of that day was: Sunday 2017-08-15 00:00:00 The Weekday of that day was: Tuesday The difference between two days: 954 days, 0:00:00