2014-10-02 15 views
19

mam datę ciąg i chcesz przekonwertować go do typu Data:Python -Usuń Czas od Datetime String

próbowałem użyć datetime.datetime.strptime z formatem, który chcę, ale to jest zwrócenie czas z konwersją.

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

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

To co powraca wyjściowe:

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

muszę wyjąć czas: 00:00:00.

Odpowiedz

31
print then.date() 

Co chcesz to obiekt datetime.date. To, co masz, to obiekt datetime.datetime. Można też zmienić obiekt podczas drukowania jak powyżej, lub wykonaj następujące czynności podczas tworzenia obiektu:

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

Dzięki za prostą odpowiedź! –

0

dla mnie, potrzebnej do utrzymania obiektu timetime ponieważ używałem UTC i jest to trochę bólu. Tak, to jest to, co skończyło się robi:

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 
) 

Przykâadowa:

>>> 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

Aby przekonwertować ciąg na randkę, najprostszym sposobem AFAIK jest moduł dateutil:

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

Obsługuje również strefy czasowe:

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

Jeśli masz obiekt datetime, powiedzieć:

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

i chcesz odciąć część czasu, to myślę, że łatwiej jest wybudować nowy obiekt zamiast „odjęcie część czasu”. Jest krótszy i bardziej kuloodporne:

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

Utrzymuje on również informacje o strefie czasowej, to jest łatwiejsze do odczytania i zrozumienia niż odejmowania timedelta, a także mają możliwość dać inną strefę czasową, w taki sam krok (co ma sens, ponieważ i tak będziesz miał część czasu zerowego).