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.

14voto

pi. Punkte 20053

Verwenden Sie einfach die Zeittupel Methode, um die Monate zu extrahieren, Ihre Monate hinzuzufügen und ein neues Datumsobjekt zu erstellen. Wenn es eine bereits existierende Methode dafür gibt, kenne ich sie nicht.

import datetime

def in_the_future(months=1):
    year, month, day = datetime.date.today().timetuple()[:3]
    new_month = month + months
    return datetime.date(year + (new_month / 12), (new_month % 12) or 12, day)

Die API ist ein wenig unbeholfen, funktioniert aber als Beispiel. Wird auch offensichtlich nicht auf Eckfälle wie 2008-01-31 + 1 Monat funktionieren :)

14voto

Mike Davies Punkte 373

Ich weiß, dies war für 6 Monate, aber die Antwort zeigt in Google für "Hinzufügen von Monaten in Python", wenn Sie einen Monat hinzufügen:

import calendar

date = datetime.date.today()    //Or your date

datetime.timedelta(days=calendar.monthrange(date.year,date.month)[1])

Dies würde die Tage im aktuellen Monat zählen und sie zum aktuellen Datum hinzufügen, mit 365/12 würde 1/12 eines Jahres kann Probleme für kurze / lange Monate verursachen, wenn Ihre Iteration über das Datum.

11voto

David Ragazzi Punkte 185

Verwendung der Python-Standardbibliotheken, d. h. ohne dateutil oder andere und die Lösung des Problems "31. Februar":

import datetime
import calendar

def add_months(date, months):
    months_count = date.month + months

    # Calculate the year
    year = date.year + int(months_count / 12)

    # Calculate the month
    month = (months_count % 12)
    if month == 0:
        month = 12

    # Calculate the day
    day = date.day
    last_day_of_month = calendar.monthrange(year, month)[1]
    if day > last_day_of_month:
        day = last_day_of_month

    new_date = datetime.date(year, month, day)
    return new_date

Prüfung:

>>>date = datetime.date(2018, 11, 30)

>>>print(date, add_months(date, 3))
(datetime.date(2018, 11, 30), datetime.date(2019, 2, 28))

>>>print(date, add_months(date, 14))
(datetime.date(2018, 12, 31), datetime.date(2020, 2, 29))

10voto

zgoda Punkte 12611

Dateutil-Paket verfügt über die Implementierung einer solchen Funktionalität. Aber seien Sie sich bewusst, dass dies naiv wie bereits von anderen erwähnt.

5voto

amoyafoss Punkte 51

Ich habe eine bessere Lösung für das Problem "31. Februar":

def add_months(start_date, months):
    import calendar

    year = start_date.year + (months / 12)
    month = start_date.month + (months % 12)
    day = start_date.day

    if month > 12:
        month = month % 12
        year = year + 1

    days_next = calendar.monthrange(year, month)[1]
    if day > days_next:
        day = days_next

    return start_date.replace(year, month, day)

Ich glaube, dass es auch mit negativen Zahlen funktioniert (um Monate zu subtrahieren), aber ich habe das nicht sehr oft getestet.

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