Python 处理日期时间值溢出的最佳方法是什么

Python 处理日期时间值溢出的最佳方法是什么,python,datetime,python-datetime,Python,Datetime,Python Datetime,我正在尝试建立一个程序来处理警报。我希望它能够处理特定日期,如2015年8月23日7:00,以及相关日期,如5天7小时。具体日期可以,但对于相对日期,如果我尝试只在日期时间上加上5天7小时,它可能会溢出该点的预期值 import datetime dt = datetime.datetime.now() dayslater = 5 hourslater = 7 minuteslater = 30 alarmTime = datetime.datetime(dt.year, dt.month, d

我正在尝试建立一个程序来处理警报。我希望它能够处理特定日期,如2015年8月23日7:00,以及相关日期,如5天7小时。具体日期可以,但对于相对日期,如果我尝试只在日期时间上加上5天7小时,它可能会溢出该点的预期值

import datetime
dt = datetime.datetime.now()
dayslater = 5
hourslater = 7
minuteslater = 30
alarmTime = datetime.datetime(dt.year, dt.month, dt.day + dayslater,
                              dt.hour + hourslater,
                              dt.minute + minuteslater, 0,0)
有时这很好,但如果dayslater为40天,则会溢出该值。我确实建立了一个简单的

if hours >= 24: 
    hours -= 24
    days++
然而,这对于以天为单位的长度不一致的满月是不起作用的

使用a并将计算留给
datetime
库:

import datetime

delta = datetime.timedelta(days=dayslater, hours=hourslater, minutes=minuteslater)
alarmTime = datetime.datetime.now() + delta
演示:

注意时间是如何延续到第二天的(从21:04到04:34),因此日期是从23日到29日的。我不必担心这里的“溢出”

这将继续在月边界、年边界和闰年工作,2月29日:

>>> datetime.datetime(2015, 7, 26, 22, 42) + delta
datetime.datetime(2015, 8, 1, 6, 12)
>>> datetime.datetime(2015, 12, 26, 22, 42) + delta
datetime.datetime(2016, 1, 1, 6, 12)
>>> datetime.datetime(2016, 2, 23, 22, 42) + delta
datetime.datetime(2016, 2, 29, 6, 12)
使用a并将计算保留到
datetime
库中:

import datetime

delta = datetime.timedelta(days=dayslater, hours=hourslater, minutes=minuteslater)
alarmTime = datetime.datetime.now() + delta
演示:

注意时间是如何延续到第二天的(从21:04到04:34),因此日期是从23日到29日的。我不必担心这里的“溢出”

这将继续在月边界、年边界和闰年工作,2月29日:

>>> datetime.datetime(2015, 7, 26, 22, 42) + delta
datetime.datetime(2015, 8, 1, 6, 12)
>>> datetime.datetime(2015, 12, 26, 22, 42) + delta
datetime.datetime(2016, 1, 1, 6, 12)
>>> datetime.datetime(2016, 2, 23, 22, 42) + delta
datetime.datetime(2016, 2, 29, 6, 12)
不要,而且很容易出错

相反,请使用
timedelta

In [1]: from datetime import datetime, timedelta

In [2]: dt = datetime.now()

In [3]: dt
Out[3]: datetime.datetime(2015, 7, 23, 15, 2, 55, 836914)

In [4]: alarmTime = dt + timedelta(days=5, hours=7, minutes=30)

In [5]: alarmTime
Out[5]: datetime.datetime(2015, 7, 28, 22, 32, 55, 836914)
不要,而且很容易出错

相反,请使用
timedelta

In [1]: from datetime import datetime, timedelta

In [2]: dt = datetime.now()

In [3]: dt
Out[3]: datetime.datetime(2015, 7, 23, 15, 2, 55, 836914)

In [4]: alarmTime = dt + timedelta(days=5, hours=7, minutes=30)

In [5]: alarmTime
Out[5]: datetime.datetime(2015, 7, 28, 22, 32, 55, 836914)

谢谢,这简单多了。如果stackoverflow允许的话,我会接受答案。谢谢,这简单多了。等我同意的时候,我会接受答案的。