615 Stimmen

Wie berechne ich mit dem Python-Modul datetime das Datum sechs Monate vor dem aktuellen Datum?

Ich verwende das Python-Modul datetime. Ich möchte das Datum 6 Monate nach dem aktuellen Datum berechnen. Könnte mir jemand ein wenig Hilfe dabei geben?

Der Grund, warum ich ein Datum generieren möchte, das 6 Monate nach dem aktuellen Datum liegt, ist, dass ich eine Datum der Überprüfung . Wenn der Benutzer Daten in das System eingibt, haben diese ein Überprüfungsdatum von 6 Monaten ab dem Datum, an dem er sie eingegeben hat.

1362voto

Mahendra Punkte 12735

Ich habe diese Lösung für gut befunden. (Diese verwendet die python-dateutil-Erweiterung )

from datetime import date
from dateutil.relativedelta import relativedelta

six_months = date.today() + relativedelta(months=+6)

Der Vorteil dieses Ansatzes besteht darin, dass er Probleme mit 28, 30, 31 Tagen usw. ausräumt. Dies ist sehr nützlich bei der Handhabung von Geschäftsregeln und Szenarien (z. B. Rechnungserstellung usw.)

$ date(2010,12,31)+relativedelta(months=+1)
  datetime.date(2011, 1, 31)

$ date(2010,12,31)+relativedelta(months=+2)
  datetime.date(2011, 2, 28)

73voto

vartec Punkte 124396

Nun, das hängt davon ab, was Sie mit 6 Monaten ab dem aktuellen Datum meinen.

  1. Natürliche Monate nutzen:

    inc = 6
    month = (month + inc - 1) % 12 + 1
    year = year + (month + inc - 1) // 12
  2. Nach der Definition eines Bankers: 6*30:

    date += datetime.timedelta(6 * 30)

66voto

Luka Lopusina Punkte 2327

Mit Python 3.x kann man das so machen:

from datetime import datetime, timedelta
from dateutil.relativedelta import *

date = datetime.now()
print(date)
# 2018-09-24 13:24:04.007620

date = date + relativedelta(months=+6)
print(date)
# 2019-03-24 13:24:04.007620

aber Sie müssen Folgendes installieren python-dateutil module :

pip install python-dateutil

24voto

dannyman Punkte 559

Hier also ein Beispiel für die dateutil.relativedelta was sich als nützlich erwiesen hat, um das vergangene Jahr zu durchlaufen, wobei jedes Mal ein Monat bis zum aktuellen Datum übersprungen wurde:

>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> today = datetime.datetime.today()
>>> month_count = 0
>>> while month_count < 12:
...  day = today - relativedelta(months=month_count)
...  print day
...  month_count += 1
... 
2010-07-07 10:51:45.187968
2010-06-07 10:51:45.187968
2010-05-07 10:51:45.187968
2010-04-07 10:51:45.187968
2010-03-07 10:51:45.187968
2010-02-07 10:51:45.187968
2010-01-07 10:51:45.187968
2009-12-07 10:51:45.187968
2009-11-07 10:51:45.187968
2009-10-07 10:51:45.187968
2009-09-07 10:51:45.187968
2009-08-07 10:51:45.187968

Wie bei den anderen Antworten müssen Sie herausfinden, was Sie mit "in 6 Monaten" eigentlich meinen. Wenn Sie "der heutige Tag des Monats in dem Monat, der sechs Jahre in der Zukunft liegt" meinen, dann wäre das ausreichend:

datetime.datetime.now() + relativedelta(months=6)

23voto

Arpan Saini Punkte 3235

Python kann dafür das datautil-Paket verwenden, siehe das folgende Beispiel

Es ist nicht nur darauf beschränkt, Sie können auch eine Kombination von Tagen, Monaten und Jahren gleichzeitig passieren.

import datetime
from dateutil.relativedelta import relativedelta

# subtract months
proc_dt = datetime.date(2021,8,31)
proc_dt_minus_3_months = proc_dt + relativedelta(months=-3)
print(proc_dt_minus_3_months)

# add months
proc_dt = datetime.date(2021,8,31)
proc_dt_plus_3_months = proc_dt + relativedelta(months=+3)
print(proc_dt_plus_3_months)

# subtract days:
proc_dt = datetime.date(2021,8,31)
proc_dt_minus_3_days = proc_dt + relativedelta(days=-3)
print(proc_dt_minus_3_days)

# add days days:
proc_dt = datetime.date(2021,8,31)
proc_dt_plus_3_days = proc_dt + relativedelta(days=+3)
print(proc_dt_plus_3_days)

# subtract years:
proc_dt = datetime.date(2021,8,31)
proc_dt_minus_3_years = proc_dt + relativedelta(years=-3)
print(proc_dt_minus_3_years)

# add years:
proc_dt = datetime.date(2021,8,31)
proc_dt_plus_3_years = proc_dt + relativedelta(years=+3)
print(proc_dt_plus_3_years)

Ergebnisse:

2021-05-31

2021-11-30

2021-08-28

2021-09-03

2018-08-31

2024-08-31

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X