有两种方法,一种只是稍微不准确,一种以不同的方式不准确:
-
添加 365.25 / 2 天的 datetime.timedelta()(平均年长度除以 2):
import datetime
sixmonths = datetime.datetime.now() + datetime.timedelta(days=365.25/2)
此方法将为您提供未来 6 个月的日期时间戳,我们将 6 个月定义为正好半年(平均而言)。
-
使用外部dateutil library,它有一个出色的relativedelta 类,可以根据日历计算将6 个月添加到您当前的日期:
import datetime
from dateutil.relativedelat import relativedelta
sixmonths = datetime.datetime.now() + relativedelta(months=6)
此方法将为您提供未来 6 个月的日期时间戳,其中日期的月份部分已转发 6,并且会考虑月份边界,确保不会跨越它们。例如,8 月 30 日加 6 个月变为 2 月 28 日或 29 日(闰年允许)。
演示可能会有所帮助。在我的时区,在发布时,这转化为:
>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2013, 2, 18, 12, 16, 0, 547567)
>>> now + datetime.timedelta(days=365.25/2)
datetime.datetime(2013, 8, 20, 3, 16, 0, 547567)
>>> now + relativedelta(months=6)
datetime.datetime(2013, 8, 18, 12, 16, 0, 547567)
所以这两种方法之间有 1 天 15 小时的差异。
同样的方法也适用于 datetime.date 对象:
>>> today = datetime.date.today()
>>> today
datetime.date(2013, 2, 18)
>>> today + datetime.timedelta(days=365.25/2)
datetime.date(2013, 8, 19)
>>> today + relativedelta(months=6)
datetime.date(2013, 8, 18)
半年时间增量在仅应用于日期时变得不太准确(现在忽略增量的第 5/8 天部分)。