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.
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()
>>> print then.date(), type(then.date())
2013-05-07 <type 'datetime.date'>
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).
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)
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>)