Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ประเภทวันที่และเวลาพื้นฐานของ Python


ในการจัดการวันที่และเวลาใน 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