ความแตกต่างที่สำคัญอย่างหนึ่งที่ไม่ได้เน้นในคำตอบอื่น ๆ คือการปรากฏตัวของคำนามเอกพจน์และพหูพจน์สำหรับความแตกต่างดั้งเดิมในแต่ละครั้ง ในขณะที่timedelta
ข้อเสนอเพียงพหูพจน์คำนาม (เช่นhours
, days
) เพื่อแสดงถึงความแตกต่างเวลาญาติrelativedelta
เสนอคำนามเอกพจน์เช่นกัน (เช่นhour
, day
) เพื่อแสดงข้อมูลเวลาที่แน่นอน
สิ่งนี้ชัดเจนจากคำจำกัดความของ 2 คลาส:
Definition: datetime.timedelta([days[, seconds[, microseconds[,
milliseconds[, minutes[, hours[, weeks]]]]]]])
Definition: relativedelta.relativedelta(self, dt1=None, dt2=None,
years=0, months=0, days=0, leapdays=0, weeks=0, hours=0, minutes=0,
seconds=0, microseconds=0, year=None, month=None, day=None,
weekday=None, yearday=None, nlyearday=None, hour=None, minute=None,
second=None, microsecond=None)
ตอนนี้รูปเอกพจน์ทำอะไรได้บ้าง? รูปแบบเอกพจน์สร้างเดลต้าซึ่งเมื่อเพิ่มลงในdatetime
อ็อบเจ็กต์ตั้งค่าวันที่ / เวลาดั้งเดิมที่ระบุในdatetime
อ็อบเจ็กต์เป็นที่กล่าวถึงในrelativedelta
. นี่คือตัวอย่างเล็ก ๆ :
>>> import datetime as dt; from dateutil.relativedelta import *
>>> NOW = dt.datetime(2018, 11, 17, 9, 6, 31)
>>> NOW
datetime.datetime(2018, 11, 17, 9, 6, 31)
>>> NOW + relativedelta(hours=1)
datetime.datetime(2018, 11, 17, 10, 6, 31)
>>> NOW + relativedelta(hour=1)
datetime.datetime(2018, 11, 17, 1, 6, 31)
นี้สามารถนำไปสู่การถูกนำมาใช้สำหรับการใช้งานที่น่าสนใจบางอย่างซึ่งจะมีความซับซ้อนในการดำเนินการใช้relativedelta
timedelta
สิ่งที่อยู่ในใจอย่างรวดเร็วคือการปัดเศษ
แอปพลิเคชั่นที่น่าสนใจ: การปัดเศษอย่างรวดเร็ว
ตอนนี้ฉันจะแสดงให้คุณเห็นว่าrelativedelta
มีการแสดงออกอย่างไรเมื่อทำการปัดเศษdatetime
วัตถุเป็นนาทีชั่วโมงวัน ฯลฯ ที่ใกล้ที่สุด
ปัดเศษเป็นชั่วโมงที่ใกล้ที่สุด:
สังเกตว่าการปัดเศษโดยใช้relativedelta
:
NOW + relativedelta(hours=1, minute=0, second=0, microsecond=0)
dt.combine(NOW.date(),dt.time(NOW.hour,0,0)) + dt.timedelta(0,60*60,0)
มีความซับซ้อนมากขึ้นการปัดเศษแข่งขันอื่น ๆ relativedelta
จะทำได้อย่างง่ายดายโดยใช้ อย่างไรก็ตามโปรดทราบว่าการปัดเศษทั้งหมดที่สามารถทำได้โดยrelativedelta
ใช้datetime
ฟังก์ชันและtimedelta
วิธีที่ซับซ้อนกว่าเล็กน้อยเท่านั้น
dateime.timedelta
ซึ่งจะบรรลุสิ่งที่คุณต้องการและหลีกเลี่ยงการพึ่งพาdateutil
แพ็คเกจภายนอก