Python -Supprimer le Temps de Dateheure Chaîne

j'ai une chaîne de date et je veux la convertir au type date:

j'ai essayé d'utiliser datetime.datetime.strptime avec le format que je veux mais il retourne le temps avec la conversion.

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

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

c'est Ce que la sortie retourne:

   2013-05-07 <type 'str'>
   2013-05-07 00:00:00 <type 'datetime.datetime'>
<!-Je dois enlever l'Heure: 00:00: 00.

24
demandé sur pythonhunter 2014-10-02 06:47:12

5 réponses

print then.date()

ce que vous voulez est une datetime.l'objet date. Ce que vous avez, c'est une datetime.objet datetime. Vous pouvez soit modifier l'objet lorsque vous imprimez comme indiqué ci-dessus, soit faire ce qui suit lors de la création de l'objet:

then = datetime.datetime.strptime(when, '%Y-%m-%d').date()
44
répondu Woody Pride 2014-10-02 03:21:15
>>> print then.date(), type(then.date())
2013-05-07 <type 'datetime.date'>
4
répondu Ignacio Vazquez-Abrams 2014-10-02 03:21:20

pour convertir une chaîne de caractères en date, la façon la plus simple de le faire est le module dateutil:

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

il peut aussi gérer les fuseaux horaires:

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

Si vous avez un objet datetime, dire:

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

et vous voulez couper la partie temps, alors je pense qu'il est plus facile de construire un nouvel objet au lieu de "soustraire la partie temps". Il est de plus en plus courts et de preuve de balle:

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

Il conserve également les informations de fuseau horaire, il est plus facile à lire et à comprendre qu'une soustraction timedelta, et vous avez aussi l'option de donner un fuseau horaire différent dans la même étape (ce qui est logique, puisque vous aurez de toute façon la partie temps zéro).

1
répondu nagylzs 2017-08-21 06:51:20

pour moi, j'avais besoin de garder un objet timetime parce que j'utilisais UTC et c'est un peu douloureux. Donc, c'est ce que j'ai fait:

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
)

Exemple de sortie:

>>> 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
répondu Dovy 2016-10-14 17:23:02

datetime objets replace() méthode. Cela préserve le fuseau horaire, donc vous pouvez faire

>>> from django.utils import timezone
>>> now = timezone.now()
>>> now
datetime.datetime(2018, 8, 30, 14, 15, 43, 726252, tzinfo=<UTC>)
>>> now.replace(hour=0, minute=0, second=0, microsecond=0)
datetime.datetime(2018, 8, 30, 0, 0, tzinfo=<UTC>)
0
répondu ukrutt 2018-08-30 14:18:15