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.

0voto

Frosty Snowman Punkte 325

Wir sollten wahrscheinlich dateutil.relativedelta verwenden

aber aus akademischem Interesse möchte ich noch hinzufügen, dass ich das hier verwenden wollte, bevor ich es entdeckte:

versuchen:
   vexpDt = K.today.replace(K.today.year + (K.today.month+6)//12, (K.today.month+5)%12+1, K.today.day)
außer:
   vexpDt = K.today.replace(K.today.year + (K.today.month+6)//12, (K.today.month+6)%12+1, 1) - timedelta(days = 1)

Es scheint recht einfach zu sein, erfasst aber dennoch alle Probleme wie 29, 30, 31

es funktioniert auch für - 6 Monate mit -timedelta

nb - lassen Sie sich nicht von K.today verwirren, das ist nur eine Variable in meinem Programm

0voto

newby Punkte 7

In dieser Funktion kann n positiv oder negativ sein.

def addmonth(d, n):
    n += 1
    dd = datetime.date(d.year + n/12, d.month + n%12, 1)-datetime.timedelta(1)
    return datetime.date(dd.year, dd.month, min(d.day, dd.day))

0voto

BabySnake Punkte 9

Ich habe dieses Problem folgendermaßen gelöst:

import calendar
from datetime import datetime
moths2add = 6
now = datetime.now()
current_year = now.year
current_month = now.month
#count days in months you want to add using calendar module
days = sum(
  [calendar.monthrange(current_year, elem)[1] for elem in range(current_month, current_month + moths)]
    )
print now + days

0voto

DataGreed Punkte 12189

Ich denke, es wäre sicherer, so etwas zu tun, als die Tage manuell hinzuzufügen:

import datetime
today = datetime.date.today()

def addMonths(dt, months = 0):
    new_month = months + dt.month
    year_inc = 0
    if new_month>12:
        year_inc +=1
        new_month -=12
    return dt.replace(month = new_month, year = dt.year+year_inc)

newdate = addMonths(today, 6)

0voto

gt_rocker Punkte 36

Ich verwende diese Funktion, um Jahr und Monat zu ändern, aber den Tag beizubehalten:

def replace_month_year(date1, year2, month2):
    try:
        date2 = date1.replace(month = month2, year = year2)
    except:
        date2 = datetime.date(year2, month2 + 1, 1) - datetime.timedelta(days=1)
    return date2

Sie sollten schreiben:

new_year = my_date.year + (my_date.month + 6) / 12
new_month = (my_date.month + 6) % 12
new_date = replace_month_year(my_date, new_year, new_month)

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