2015-07-04 58 views
1

我有一个日期字符串像这样,然后使用strptime()所以它这样添加时间DATETIME

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%Y') 

,现在我要到23小时59分钟添加到my_time

我已经试过.timedelta但它不起作用?我怎么能这样做?

+0

什么是你的代码使用?它适用于我 –

+0

你问你是否有代码“试过”但没有发布作品?如果你知道它不起作用,你希望有什么人在没有看到代码的情况下告诉你这件事? –

回答

9

之后添加时间;你可以用datetime.replace() method这样做产生新datetime对象:

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y') 
my_time = my_time.replace(hour=23, minute=59) 

datetime.strptime()设置小时和分钟值恢复为默认,0。请注意,对于两位数的年份(如15),您将使用%y,而不是%Y,这是一个四位数的年份。

您也可以使用datetime.combine() class method配对了datetime对象:

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y') 
my_time = datetime.datetime.combine(my_time.date(), datetime.time(23, 59)) 

如果你觉得你必须使用一个timedelta(),考虑到加入它会再次产生一个新的datetime对象。你可以使用增强分配给它添加“就地”:

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y') 
my_time += datetime.timedelta(hours=23, minutes=59) 

演示:

>>> import datetime 
>>> my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y') 
>>> my_time.replace(hour=23, minute=59) 
datetime.datetime(2015, 7, 5, 23, 59) 
>>> datetime.datetime.combine(my_time.date(), datetime.time(23, 59)) 
datetime.datetime(2015, 7, 5, 23, 59) 
>>> my_time + datetime.timedelta(hours=23, minutes=59) 
datetime.datetime(2015, 7, 5, 23, 59) 
+0

如果您需要添加负值或超过一天的金额,那么只有'timedelta()'解决方案可以工作。 – jfs

6

首先,根据您提供的日期字符串时,format似乎是错的,你应该使用%y(小y)为2位数年份,%Y(大写Y)为4位数年份。

然后,您可以使用timedelta将时间添加到my_time中,如下所示,但添加操作会生成新的datetime对象,但不会更改my_time

因此,你需要将它分配回你my_time这样的 -

>>> import datetime 

>>> my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y') 
>>> my_time = my_time + datetime.timedelta(hours=23,minutes=59) 
>>> my_time 
datetime.datetime(2015, 7, 5, 23, 59)