2015-07-04 78 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)