J'ai une date "10/10/11(m-d-y)"
et je veux lui ajouter 5 jours en utilisant un script Python. Veuillez envisager une solution générale qui fonctionne également les fins de mois.
J'utilise le code suivant:
import re
from datetime import datetime
StartDate = "10/10/11"
Date = datetime.strptime(StartDate, "%m/%d/%y")
print Date
-> imprime '2011-10-10 00:00:00'
Maintenant, je veux ajouter 5 jours à cette date. J'ai utilisé le code suivant:
EndDate = Date.today()+timedelta(days=10)
Qui a renvoyé cette erreur:
name 'timedelta' is not defined
name 'timedelta' is not defined
, cela signifie que vous n'avez définitimedelta
nulle part. Python est généralement assez informatif sur ses messages d'erreur.Réponses:
Les réponses précédentes sont correctes mais c'est généralement une meilleure pratique à faire:
Ensuite, vous aurez, en utilisant
datetime.timedelta
:la source
strptime
méthode sur ladatetime
classe dudatetime
module, vous devez donc la spécifierdatetime.datetime
.datetime
? Vous ne pouvez pas compter sur la convention pour savoir, mais vous devez toujours regarder les importations.from datetime import DateTime
puisque les classes sont CamelCased, mais datetime précède PEP8.Importer
timedelta
et d'date
abord.Et
date.today()
renverra la date et l'heure d'aujourd'hui, peut-être voulez-vousla source
date
objet n'a pas detimedelta
méthode. Quelle version de Python utilisez-vous?from datetime import timedelta, date; date.today() + timedelta(days=10)
Si vous utilisez déjà des pandas , vous pouvez économiser un peu d'espace en ne spécifiant pas le format:
la source
Je suppose que vous manquez quelque chose comme ça:
la source
Voici une autre méthode pour ajouter des jours à la date en utilisant relativedelta de dateutil .
Production:
la source
Si vous souhaitez ajouter des jours à ce jour, vous pouvez utiliser ce code
la source
Voici une fonction pour obtenir à partir de maintenant + jours spécifiés
Usage:
la source
Afin d'avoir un code moins détaillé et d'éviter les conflits de nom entre datetime et datetime.datetime , vous devez renommer les classes avec des noms CamelCase .
Vous pouvez donc faire ce qui suit, ce qui, je pense, est plus clair.
De plus, il n'y aurait pas de conflit de nom si vous le souhaitez
import datetime
ultérieurement.la source
en utilisant
timedelta
s, vous pouvez faire:la source
En général, vous n'avez pas de réponse maintenant, mais peut-être que ma classe que j'ai créée sera également utile. Pour moi, cela résout toutes mes exigences que j'ai jamais eues dans mes projets Pyhon.
Comment l'utiliser
self.tz = pytz.timezone("Europe/Warsaw")
- ici vous définissez le fuseau horaire que vous souhaitez utiliser dans le projetGetDate("2019-08-08").current()
- cela convertira la date de votre chaîne en objet sensible au temps avec le fuseau horaire que vous avez défini au pt 1. Le format de chaîne par défaut est,format="%Y-%m-%d"
mais n'hésitez pas à le modifier. (par exemple.GetDate("2019-08-08 08:45", format="%Y-%m-%d %H:%M").current()
)GetDate("2019-08-08").get_month_first_day()
renvoie la date donnée (chaîne ou objet) mois premier jourGetDate("2019-08-08").get_month_last_day()
renvoie la date donnée le mois dernierGetDate("2019-08-08").minimum_time()
renvoie la date donnée le début du jourGetDate("2019-08-08").maximum_time()
renvoie la date donnée en fin de journéeGetDate("2019-08-08").time_delta_days({number_of_days})
renvoie la date donnée + ajouter {nombre de jours} (vous pouvez également appeler:GetDate(timezone.now()).time_delta_days(-1)
pour hier)GetDate("2019-08-08").time_delta_haours({number_of_hours})
similaire au pt 7 mais travaillant sur les heuresGetDate("2019-08-08").time_delta_seconds({number_of_seconds})
similaire au pt 7 mais travaillant sur les secondesla source
Un certain temps, nous devons utiliser la recherche par date et date. Si nous utilisons date__range, nous devons ajouter 1 jour avec to_date, sinon queryset sera vide.
Exemple:
depuis datetime import timedelta
from_date = parse_date (request.POST ['from_date'])
to_date = parse_date (request.POST ['to_date']) + timedelta (jours = 1)
attend_list = models.DailyAttendance.objects.filter (attdate__range = [from_date, to_date])
la source