2016-01-06 95 views
6

說我有一些格式爲%H:%M:%S的字符串,例如: 04:35:45。我想將它們轉換爲datetime.datetime對象,年/月/日與datetime.datetime.now()相同。什麼是從「%H:%M:%S」創建日期時間的最佳方式

我試圖

now = datetime.now() 
datetime_obj = datetime.strptime(time_string, "%H:%M:%S") 
datetime_obj.year = now.year 
datetime_obj.month = now.month 
datetime_obj.day = now.day 

因爲year/month/day是隻讀屬性這是行不通的。那麼最好的解決方案是什麼?

回答

7

你想datetime.combine(date, time)

>>> time = datetime.datetime.strptime("04:35:45", "%H:%M:%S").time() 
>>> time 
datetime.time(4, 35, 45) 
>>> day = datetime.datetime.now().date() 
>>> day 
datetime.date(2016, 1, 6) 
>>> datetime.datetime.combine(day, time) 
datetime.datetime(2016, 1, 6, 4, 35, 45) 
>>> 
+0

我個人更喜歡這個答案。 – laike9m

4

第三方dateutil使用在這種情況下,當前日期:

>>> from dateutil.parser import parse 
>>> time_string = "04:35:45" 
>>> parse(time_string) 
datetime.datetime(2016, 1, 6, 4, 35, 45) 

或者,你可以使用.replace()設置年,月,日:

>>> datetime_obj = datetime.strptime(time_string, "%H:%M:%S") 
>>> datetime_obj.replace(year=now.year, month=now.month, day=now.day) 
datetime.datetime(2016, 1, 6, 4, 35, 45) 

雖然,我非常喜歡布魯諾發佈的.combine() option

+0

好。我可以在沒有第三方庫的情況下做到嗎? – laike9m

+0

@ laike9m好的,更新了,謝謝。 – alecxe

1

您可以使用datetime_obj.replace。從文檔:

返回具有相同屬性的日期時間,除了那些由指定的關鍵字參數指定新值的屬性。

例如:

from datetime import datetime 

time_string = "04:35:45" 

now = datetime.now() 
datetime_obj = datetime.strptime(time_string, "%H:%M:%S") 
datetime_obj = datetime_obj.replace(
     year = now.year, 
     month = now.month, 
     day = now.day 
     ) 

print datetime_obj 

它打印:

2016-01-06 04:35:45 
1

你可能只是打發時間的整數,以datetime.replace,而無需創建兩個datetime對象:

time_sring = "12:31:33" 
hr, mn, sec = map(int, time_sring.split(":")) 
dtetime_obj = datetime.now().replace(hour=hr, minute=mn, second=sec) 
2016-01-06 12:31:33.439492 
相關問題