2014-10-02 40 views
19

我有一個日期字符串,並希望將其轉換爲日期類型:的Python -Remove時間從時間字符串

我曾嘗試使用datetime.datetime.strptime與我想要的格式,但它返回的與轉換的時間。

when = alldates[int(daypos[0])] 
    print when, type(when) 

    then = datetime.datetime.strptime(when, '%Y-%m-%d') 
    print then, type(then) 

這是輸出的回報:

2013-05-07 <type 'str'> 
    2013-05-07 00:00:00 <type 'datetime.datetime'> 

我需要刪除的時間:00:00。

回答

31
print then.date() 

你想要的是一個datetime.date對象。你有什麼是一個datetime.datetime對象。您可以更改對象在打印時按以上,或創建對象時,請執行下列操作:

then = datetime.datetime.strptime(when, '%Y-%m-%d').date() 
4
>>> print then.date(), type(then.date()) 
2013-05-07 <type 'datetime.date'> 
+1

感謝您的簡單答案! – 2017-08-20 00:52:41

0

對於我來說,我需要保持一個timetime對象,因爲我用的是UTC,它是一個痛苦的一點。所以,這是我落得這樣做:

date = datetime.datetime.utcnow() 

start_of_day = date - datetime.timedelta(
    hours=date.hour, 
    minutes=date.minute, 
    seconds=date.second, 
    microseconds=date.microsecond 
) 

end_of_day = start_of_day + datetime.timedelta(
    hours=23, 
    minutes=59, 
    seconds=59 
) 

輸出示例:

>>> date 
datetime.datetime(2016, 10, 14, 17, 21, 5, 511600) 
>>> start_of_day 
datetime.datetime(2016, 10, 14, 0, 0) 
>>> end_of_day 
datetime.datetime(2016, 10, 14, 23, 59, 59) 
0

將字符串轉換成日期,最簡單的方法AFAIK是dateutil模塊:

import dateutil.parser 
datetime_object = dateutil.parser.parse("2013-05-07") 

它也可以處理時區:

print(dateutil.parser.parse("2013-05-07")) 
>>> datetime.datetime(2013, 5, 7, 1, 12, 12, tzinfo=tzutc()) 

如果你有一個DateTime對象,說:

import pytz 
import datetime 
now = datetime.datetime.now(pytz.UTC) 

並且要砍掉一部分時間,那麼我認爲這是更容易構造一個新的對象,而不是「從其減去部分時間」。它是更短,更防彈:

date_part datetime.datetime(now.year, now.month, now.day, tzinfo=now.tzinfo) 

它還保留的時區信息,更容易閱讀和理解比timedelta減法,你也得給不同的時區,在同一選項步驟(這是有道理的,因爲無論如何你都會有零時間的部分)。