2014-10-02 12 views
19

ho una stringa di data e voglio convertirlo il tipo di data:Python -Togliere Tempo da Datetime String

ho cercato di utilizzare datetime.datetime.strptime con il formato che voglio, ma sta tornando il tempo con la conversione.

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

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

Questo è ciò che i rendimenti di uscita:

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

ho bisogno di togliere il tempo: 00:00:00.

risposta

31
print then.date() 

Quello che si desidera è un oggetto datetime.date. Quello che hai è un oggetto datetime.datetime. È possibile modificare l'oggetto quando si stampa di cui al precedente, oppure eseguire le seguenti operazioni quando si crea l'oggetto:

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

Grazie per la semplice risposta! –

0

Per quanto mi riguarda, avevo bisogno di tenere un oggetto timetime perché stavo usando UTC ed è un un po 'di dolore Quindi, questo è quello che ho finito per fare:

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 
) 

uscita Esempio:

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

Per convertire una stringa in una data, il modo più semplice per quanto ne so è il modulo dateutil:

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

Può anche gestire i fusi orari:

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

Se si dispone di un oggetto datetime, dire:

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

e si vuole tagliare fuori la parte di tempo, quindi penso che sia più facile costruire un nuovo oggetto invece di "sottraendo la parte di tempo". E 'più breve e più a prova di proiettile:

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

Mantiene anche le informazioni fuso orario, è più facile da leggere e capire che una sottrazione timedelta, e si ha anche la possibilità di dare un fuso orario diverso nella stessa passo (che ha senso, dal momento che avrete comunque una parte a tempo zero).