Quelle est une manière élégante de tronquer un objet datetime python?
Dans ce cas particulier, au jour le jour. Donc, en gros, régler l'heure, les minutes, les secondes et les microsecondes à 0.
Je voudrais que la sortie soit également un objet datetime, pas une chaîne.
replace()
méthode retourne un objet datetime, de sorte que le incantatoire correcte serait:dt = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
datetime
, pasdate
objet (que vous pourriez obtenir en utilisantdt.date()
call (pas besoin d'utiliser le constructeur explicite)). La.replace()
méthode peut échouer si elledatetime
ajoute un support nanoseconde . Vous pouvez utiliser à ladatetime.combine()
place .datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
?Utilisez un
date
pasdatetime
si vous ne vous souciez pas du temps.Vous pouvez mettre à jour un datetime comme ceci:
la source
Quatre ans plus tard: une autre façon, en évitant
replace
Je sais que la réponse acceptée d'il y a quatre ans fonctionne, mais cela semble un peu plus léger que l'utilisation
replace
:Remarques
datetime
objet sans transmettre les propriétés de temps au constructeur, vous obtenez minuit.dt = datetime.datetime.now()
la source
Vous ne pouvez pas tronquer un objet datetime car il est immuable .
Cependant, voici une façon de construire un nouveau datetime avec des champs de 0 heure, minute, seconde et microseconde, sans jeter la date d'origine ou tzinfo:
la source
replace
option en premier, car c'est probablement ce qu'ils veulent.tzinfo=now.tzinfo
. Letzinfo
minuit peut être différent, par exemple, le décalage utc à2012-04-01 00:09:00
(9h) en Australie / Melbourne est le fuseau horaireAEST+10:00
mais il estAEDT+11:00
à2012-04-01 00:00:00
(minuit) - il y a une transition de fin de l'heure d'été ce jour-là. Vous pouvez utiliser lepytz
module pour le réparer, voir ma réponse.Pour obtenir un minuit correspondant à un objet datetime donné, vous pouvez utiliser la
datetime.combine()
méthode :L'avantage par rapport à la
.replace()
méthode est que ladatetime.combine()
solution basée sur continuera à fonctionner même si ledatetime
module introduit le support des nanosecondes .tzinfo
peut être conservé si nécessaire mais le décalage utc peut être différent à minuit, par exemple, en raison d'une transition DST et donc une solution naïve (définition de l'tzinfo
attribut time) peut échouer. Voir Comment puis-je obtenir l'heure UTC de «minuit» pour un fuseau horaire donné?la source
Vous pouvez utiliser des pandas pour cela (bien que cela puisse être une surcharge pour cette tâche). Vous pouvez utiliser le rond , le sol et le plafond comme pour les nombres habituels et toute fréquence de pandas provenant d' alias décalés :
la source
Vous pouvez utiliser datetime.strftime pour extraire le jour, le mois, l'année ...
Exemple :
Sortie (pour aujourd'hui):
Si vous voulez simplement récupérer le jour, vous pouvez utiliser l'attribut day comme:
Ouput (pour aujourd'hui):
la source
d.day
etc.Il existe une grande bibliothèque utilisée pour manipuler les dates: Delorean
et si vous souhaitez récupérer la valeur datetime:
la source
Voir plus sur https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.floor.html
C'est maintenant 2019, je pense que la façon la plus efficace de le faire est:
la source
Il existe un module datetime_truncate qui gère cela pour vous. Il appelle simplement datetime.replace.
la source
6 ans plus tard ... J'ai trouvé ce post et j'ai plus aimé l'approche numpy:
à votre santé
la source
la source
Vous pouvez simplement utiliser
Il est léger et renvoie exactement ce que vous voulez.
la source
Que signifie tronquer?
Vous avez un contrôle total sur la mise en forme en utilisant la méthode strftime () et en utilisant une chaîne de format appropriée.
http://docs.python.org/library/datetime.html#strftime-strptime-behavior
la source
Si vous traitez une série de type DateTime, il existe un moyen plus efficace de les tronquer, spécialement lorsque l'objet Series a beaucoup de lignes.
Vous pouvez utiliser la fonction étage
Par exemple, si vous souhaitez le tronquer en heures:
Générer une plage de dates
Nous pouvons le vérifier en comparant le temps de fonctionnement entre les fonctions de remplacement et de plancher.
la source
Voici encore une autre manière qui tient dans une ligne mais n'est pas particulièrement élégante:
la source