it-swarm.com.de

Hinzufügen von 5 Tagen zu einem Datum in Python

Ich habe ein Datum "10/10/11(m-d-y)" und möchte es mit einem Python Skript um 5 Tage verlängern. Bitte ziehen Sie eine allgemeine Lösung in Betracht, die auch am Monatsende funktioniert.

Ich benutze folgenden Code:

import re
from datetime import datetime

StartDate = "10/10/11"

Date = datetime.strptime(StartDate, "%m/%d/%y")

print Date -> druckt '2011-10-10 00:00:00'

Jetzt möchte ich 5 Tage zu diesem Datum hinzufügen. Ich habe folgenden Code benutzt:

EndDate = Date.today()+timedelta(days=10)

Welche diesen Fehler zurückgegeben:

name 'timedelta' is not defined
302
MuraliKrishna

Die vorherigen Antworten sind korrekt, aber es ist im Allgemeinen besser, Folgendes zu tun:

_import datetime
_

Dann müssen Sie mit datetime.timedelta :

_date_1 = datetime.datetime.strptime(start_date, "%m/%d/%y")

end_date = date_1 + datetime.timedelta(days=10)
_
462
Botond Béres

Zuerst timedelta importieren.

from datetime import timedelta

Und Date.today() gibt die aktuelle Datumszeit zurück, wenn Sie möchten

EndDate = Date + timedelta(days=10)
100
DrTyrsa

Wenn Sie Pandas bereits verwenden, können Sie etwas Platz sparen, indem Sie das Format nicht angeben:

import pandas as pd
startdate = "10/10/2011"
enddate = pd.to_datetime(startdate) + pd.DateOffset(days=5)
15
fantabolous

Ich vermute du vermisst so etwas:

from datetime import timedelta
12
vstm

Hier ist eine andere Methode zum Hinzufügen von Tagen am Datum mit dateutils relativedelta.

from datetime import datetime
from dateutil.relativedelta import relativedelta

print 'Today: ',datetime.now().strftime('%d/%m/%Y %H:%M:%S') 
date_after_month = datetime.now()+ relativedelta(days=5)
print 'After 5 Days:', date_after_month.strftime('%d/%m/%Y %H:%M:%S')

Ausgabe:

Heute: 25.06.2015 15:56:09 Uhr

Nach 5 Tagen: 30.06.2015 15:56:09

11
Atul Arvind

Hier ist eine Funktion zum Abrufen von + angegebenen Tagen

import datetime

def get_date(dateFormat="%d-%m-%Y", addDays=0):

    timeNow = datetime.datetime.now()
    if (addDays!=0):
        anotherTime = timeNow + datetime.timedelta(days=addDays)
    else:
        anotherTime = timeNow

    return anotherTime.strftime(dateFormat)

Verwendungszweck:

addDays = 3 #days
output_format = '%d-%m-%Y'
output = get_date(output_format, addDays)
print output
8
Guray Celik

Wenn Sie jetzt Tage hinzufügen möchten, können Sie diesen Code verwenden

from datetime import datetime
from datetime import timedelta


date_now_more_5_days = (datetime.now() + timedelta(days=5) ).strftime('%Y-%m-%d')
8
Jorge Omar MH

Um einen weniger ausführlichen Code zu haben und Namenskonflikte zwischen datetime und datetime.datetime zu vermeiden, sollten Sie umbenennen die Klassen mit CamelCase Namen.

from datetime import datetime as DateTime, timedelta as TimeDelta

Sie können also Folgendes tun, was meiner Meinung nach klarer ist.

date_1 = DateTime.today() 
end_date = date_1 + TimeDelta(days=10)

Es würde auch kein Namenskonflikt geben, wenn Sie später import datetime möchten.

5
toto_tico

Im Allgemeinen haben Sie jetzt keine Antwort, aber vielleicht ist meine Klasse, die ich erstellt habe, auch hilfreich. Für mich erfüllt es alle meine Anforderungen, die ich jemals in meinen Pyhon-Projekten hatte.

class GetDate:
    def __init__(self, date, format="%Y-%m-%d"):
        self.tz = pytz.timezone("Europe/Warsaw")

        if isinstance(date, str):
            date = datetime.strptime(date, format)

        self.date = date.astimezone(self.tz)

    def time_delta_days(self, days):
        return self.date + timedelta(days=days)

    def time_delta_hours(self, hours):
        return self.date + timedelta(hours=hours)

    def time_delta_seconds(self, seconds):
        return self.date + timedelta(seconds=seconds)

    def get_minimum_time(self):
        return datetime.combine(self.date, time.min).astimezone(self.tz)

    def get_maximum_time(self):
        return datetime.combine(self.date, time.max).astimezone(self.tz)

    def get_month_first_day(self):
        return datetime(self.date.year, self.date.month, 1).astimezone(self.tz)

    def current(self):
        return self.date

    def get_month_last_day(self):
        lastDay = calendar.monthrange(self.date.year, self.date.month)[1]
        date = datetime(self.date.year, self.date.month, lastDay)
        return datetime.combine(date, time.max).astimezone(self.tz)

Wie benutzt man es

  1. self.tz = pytz.timezone("Europe/Warsaw") - hier definieren Sie die Zeitzone, die Sie im Projekt verwenden möchten
  2. GetDate("2019-08-08").current() - dies konvertiert Ihr String-Datum in ein zeitbewusstes Objekt mit der Zeitzone, die Sie in Punkt 1 definiert haben. Das Standard-String-Format ist format="%Y-%m-%d", Sie können es jedoch jederzeit ändern. (zB GetDate("2019-08-08 08:45", format="%Y-%m-%d %H:%M").current())
  3. GetDate("2019-08-08").get_month_first_day() gibt den ersten Tag des angegebenen Datums (Zeichenfolge oder Objekt) des Monats zurück
  4. GetDate("2019-08-08").get_month_last_day() gibt das angegebene Datum Monat letzten Tag zurück
  5. GetDate("2019-08-08").minimum_time() gibt den angegebenen Datumsstarttag zurück
  6. GetDate("2019-08-08").maximum_time() gibt das angegebene Tagesende zurück
  7. GetDate("2019-08-08").time_delta_days({number_of_days}) gibt das angegebene Datum zurück + {Anzahl der Tage} hinzufügen (Sie können auch anrufen: GetDate(timezone.now()).time_delta_days(-1) für gestern)
  8. GetDate("2019-08-08").time_delta_haours({number_of_hours}) ähnelt Punkt 7, arbeitet aber an Stunden
  9. GetDate("2019-08-08").time_delta_seconds({number_of_seconds}) ähnelt pt 7, arbeitet aber an Sekunden
0

mit timedeltas können Sie Folgendes tun:

import datetime
today=datetime.date.today()


time=datetime.time()
print("today :",today)

# One day different .
five_day=datetime.timedelta(days=5)
print("one day :",five_day)
#output - 1 day , 00:00:00


# five day extend .
fitfthday=today+five_day
print("fitfthday",fitfthday)


# five day extend .
fitfthday=today+five_day
print("fitfthday",fitfthday)
#output - 
today : 2019-05-29
one day : 5 days, 0:00:00
fitfthday 2019-06-03
0
sameer_nubia