Comment puis-je soustraire ou ajouter 100 ans à un datetime
dans la base de données de Django ?
La date est dans la base de données, je veux juste mettre à jour directement le champ sans le récupérer pour le calculer puis l'insérer.
Comment puis-je soustraire ou ajouter 100 ans à un datetime
dans la base de données de Django ?
La date est dans la base de données, je veux juste mettre à jour directement le champ sans le récupérer pour le calculer puis l'insérer.
J'utiliser le relativedelta
en fonction de la dateutil.relativedelta
package, ce qui vous donnera êtes calcul plus précis « il y a n ans »:
from dateutil.relativedelta import relativedelta
import datetime
years_ago = datetime.datetime.now() - relativedelta(years=5)
Ensuite, mettez simplement à jour le date
comme d'autres l'ont montré ici.
Utilisez timedelta . Quelque chose comme ça devrait faire l'affaire :
import datetime
years = 100
days_per_year = 365.24
hundred_years_later = my_object.date + datetime.timedelta(days=(years*days_per_year))
La .update()
sur un ensemble de requêtes Django vous permet de mettre à jour toutes les valeurs sans récupérer l'objet de la base de données. Vous pouvez vous référer à la valeur existante à l'aide d'un objet F()
.
Malheureusement, le timedelta de Python ne fonctionne pas avec les années, vous devrez donc calculer 100 ans exprimés en jours (c'est 36524.25):
MyModel.objects.update(timestamp=F('timestamp')+timedelta(days=36524.25))
Je sais que c'est une vieille question, mais j'ai eu le problème d'en trouver une bonne pour résoudre mon problème, j'ai créé ceci : utilisez plus(+) ou moins(-) pour gérer avec :
import datetime # Don't forget to import it
def subadd_date(date,years):
''' Subtract or add Years to a specific date by pre add + or - '''
if isinstance(date,datetime.datetime) and isinstance(years,int):
day,month,year = date.day , date.month , date.year
#If you want to have HOUR, MINUTE, SECOND
#With TIME:
# day,month,year,hour,minute,second = date.day, date.month,date.year,date.hour,date.minute,date.second
py = year + years # The Past / Futur Year
new_date_str = "%s-%s-%s" % (day,month,py) # New Complete Date
# With TIME : new_date_str = "%s-%s-%s %s:%s:%s" % (month,day,py,hour,minute,second)
try:
new_date = datetime.datetime.strptime(new_date_str,"%d-%m-%Y")
except ValueError: # day is out of range for month (February 29th)
new_date_str = "%s-%s-%s" % (1,month+1,py) # New Complete Date : March 1st
new_date = datetime.datetime.strptime(new_date_str,"%d-%m-%Y")
return new_date
# With TIME : return datetime.datetime.strptime(new_date_str,"%d-%m-%Y %H:%M:%Y")
return None
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.