267 votes

Python datetime - définir l'heure et la minute fixes après avoir utilisé strptime pour obtenir le jour, le mois et l'année

J'ai réussi à convertir quelque chose de 26 Sep 2012 format pour 26-09-2012 en utilisant :

datetime.strptime(request.POST['sample_date'],'%d %b %Y')

Cependant, je ne sais pas comment régler l'heure et la minute de quelque chose comme ce qui précède à 11:59. Quelqu'un sait-il comment faire ?

Remarque : il peut s'agir d'une date future ou d'une date aléatoire, et pas seulement de la date actuelle.

522voto

nneonneo Points 56821

Utilisez datetime.replace :

from datetime import datetime
dt = datetime.strptime('26 Sep 2012', '%d %b %Y')
newdatetime = dt.replace(hour=11, minute=59)

A noter également : datetime.replace renvoie une nouvelle copie de la datetime (depuis datetime est immuable) : c'est comme str.replace à cet égard.

64voto

Abhay Chauhan Points 635

datetime.replace() fournira les meilleures options. Il permet également de remplacer le jour, l'année et le mois.

Supposons que nous ayons un datetime et la date est représentée par : "2017-05-04"

>>> from datetime import datetime
>>> date = datetime.strptime('2017-05-04',"%Y-%m-%d")
>>> print(date)
2017-05-04 00:00:00
>>> date = date.replace(minute=59, hour=23, second=59, year=2018, month=6, day=1)
>>> print(date)
2018-06-01 23:59:59

14voto

Florian Brucker Points 2383

Si vous avez une date comme datetime.datetime (ou un datetime.date ) et je veux la combiner avec une heure provenant d'une instance de datetime.time vous pouvez alors utiliser la méthode de classe datetime.datetime.combine :

import datetime
dt = datetime.datetime(2020, 7, 1)
t = datetime.time(12, 34)
combined = datetime.datetime.combine(dt.date(), t)

4voto

pymen Points 49

Raccourcis pour convertir une date en maximum ou minimum

import datetime

def dt_time_min(dt):
    """converts any datetime/date to new datetime with same date and time=0:00:00"""
    return datetime.datetime.combine(dt, datetime.time.min)

def dt_time_max(dt):
    """converts any datetime/date to new datetime with same date and time=23:59:59.999999"""
    return datetime.datetime.combine(dt, datetime.time.max)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X