添加一天的time.struct_time对象

时间:2017-08-31 21:36:55

标签: python python-2.7 datetime

我正在使用time.struct_time来设置日期和时间,我想使用python脚本添加到第二天。

我正在使用以下代码:

date_1 = "31/08/2017 10:30PM"
time_1 = time.strptime(date_1, '%d/%m/%Y %I:%M%p')

输出:

time.struct_time(tm_year=2017, tm_mon=8, tm_mday=31, tm_hour=22, tm_min=30, tm_sec=0, tm_wday=3, tm_yday=243, tm_isdst=-1)

现在我想在此日期添加1天。我使用了以下代码:

time.struct_time(tm_year=2017, tm_mon=9, tm_mday=1, tm_hour=22, tm_min=30, tm_sec=0, tm_wday=3, tm_yday=243, tm_isdst=-1)

我是新手,所以你能告诉我一个例子,我可以使用我的代码添加到第二天的日期吗?

2 个答案:

答案 0 :(得分:0)

老实说,我不确定是否有(干净的)方式。 struct_time对象的数据存储为元组,因此它们是不可变的。这意味着他们无法真正进行适当的修改。

我认为您应该使用datetime模块,如下所示:

>>> from datetime import datetime
>>> date_1 = "31/08/2017 10:30PM"
>>> time_1 = datetime.strptime(date_1, "%d/%m/%Y %I:%M%p")
>>> time_1
datetime.datetime(2017, 8, 31, 22, 30)

然后您可以像这样添加一个月:

>>> from dateutil.relativedelta import relativedelta
>>> time_1 + relativedelta(months=1)
datetime.datetime(2017, 9, 30, 22, 30)

如果您想添加一天,请使用datetime.timedelta()来处理月份的天数:

from datetime import timedelta
time_1 + timedelta(days=1)

我没有使用上述原因的原因是因为timedelta()不需要数月作为参数

如果您希望将其转换回字符串,那么您可以使用strftime()函数,如下所示:

>>> new_time_1 = time_1 + relativedelta(months=1)
>>> print(datetime.strftime(new_time_1, '%d/%m/%Y'))
30/09/2017
>>> print(datetime.strftime(time_1, '%d/%m/%Y'))
31/08/2017

如果由于某种原因你需要使用time模块(比如代码的一部分),但是你想将它转换为datetime对象(出于这样的原因),那么我请转到this问题。

答案 1 :(得分:0)

按照此问题中的说明考虑datetime.timedeltaAdding 5 days to a date in Python