673 Stimmen

Hinzufügen von Tagen zu einem Datum in Python

Ich habe eine Verabredung "10/10/11(m-d-y)" und ich möchte mit einem Python-Skript 5 Tage dazuzählen. Bitte überlegen Sie sich eine allgemeine Lösung, die auch für die Monatsenden funktioniert.

Ich verwende 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 den folgenden Code verwendet:

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

Dies führte zu diesem Fehler:

name 'timedelta' is not defined

1 Stimmen

Die Suche hat nicht funktioniert? Alle diese Code-Beispiele wären hilfreich gewesen: stackoverflow.com/search?q=python+timedelta . Es scheint über 200 Fragen wie diese zu geben.

1 Stimmen

14 Stimmen

Sie wollen fünf Tage hinzufügen, aber dann haben Sie timedelta(days=10) Ich bin verwirrt, woher die 10 kommt und warum es nicht 5 ist.

2voto

Hazrat ali Punkte 147

Ich bin gerade auf diesen alten Thread gestoßen:

Ich habe nachgesehen, aber die meisten Antworten sind die gleichen. Von all diesen Antworten gefielen mir zwei, also dachte ich, ich sollte die Effizienz dieser beiden Ansätze überprüfen.

Erster Ansatz: Verwendung des DateTime-Moduls Zweiter Ansatz: Verwendung der Pandabibliothek

Also habe ich den Test etwa 10k mal ausgeführt und die Pandas-Bibliothek Methode war viel langsamer. Ich schlage also vor, das integrierte DateTime-Modul zu verwenden.

from datetime import date, timedelta
import pandas as pd
import timeit

def using_datetime():
    pre_date = date(2013, 10, 10)
    day_date = pre_date + timedelta(days=5)
    return day_date

def using_pd():
    start_date = "10/10/2022"
    pd_date = pd.to_datetime(start_date)
    end_date = pd_date + pd.DateOffset(days=5)
    return end_date

for func in [using_datetime, using_pd]:
    print(f"{func.__name__} Time Took: ",  timeit.timeit(stmt=func, number=10000))

# Output 
# using_datetime Time Took:  0.009390000021085143
# using_pd Time Took:  2.1051381999859586

0voto

sameer_nubia Punkte 621

Mit timedelta s können Sie 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

0voto

Michael Stachura Punkte 904

Im Allgemeinen haben Sie jetzt eine Antwort bekommen, aber vielleicht ist meine Klasse, die ich erstellt habe, auch hilfreich. Für mich löst sie 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 man es benutzt

  1. self.tz = pytz.timezone("Europe/Warsaw") - Hier legen Sie die Zeitzone fest, die Sie im Projekt verwenden möchten
  2. GetDate("2019-08-08").current() - konvertiert die Zeichenkette date in time aware object mit der in Punkt 1 definierten Zeitzone. Das Standard-Stringformat ist format="%Y-%m-%d" aber Sie können ihn gerne ändern. (z.B.. GetDate("2019-08-08 08:45", format="%Y-%m-%d %H:%M").current() )
  3. GetDate("2019-08-08").get_month_first_day() liefert das angegebene Datum (String oder Objekt) Monat erster Tag
  4. GetDate("2019-08-08").get_month_last_day() Rückgabe des angegebenen Datums Monat letzter Tag
  5. GetDate("2019-08-08").minimum_time() gibt gegebenes Datum zurück Tag Beginn
  6. GetDate("2019-08-08").maximum_time() Rückgabe des angegebenen Datums Tag Ende
  7. GetDate("2019-08-08").time_delta_days({number_of_days}) gibt das angegebene Datum zurück + addiert {Anzahl der Tage} (Sie können auch aufrufen: GetDate(timezone.now()).time_delta_days(-1) für gestern)
  8. GetDate("2019-08-08").time_delta_haours({number_of_hours}) ähnlich wie Punkt 7, aber mit mehr Arbeitsstunden
  9. GetDate("2019-08-08").time_delta_seconds({number_of_seconds}) ähnlich wie Punkt 7, aber in Sekundenschnelle

0voto

jahurul25 Punkte 129

Manchmal müssen wir die Suche nach dem Datum "von" und "bis" verwenden. Wenn wir verwenden date__range dann müssen wir 1 Tag hinzufügen zu to_date sonst ist das Queryset leer.

Beispiel:

from datetime import timedelta  

from_date  = parse_date(request.POST['from_date'])

to_date    = parse_date(request.POST['to_date']) + timedelta(days=1)

attendance_list = models.DailyAttendance.objects.filter(attdate__range = [from_date, to_date])

0voto

bvmcode Punkte 2212

Ich habe bereits ein Pandas-Beispiel gesehen, aber hier eine Abwandlung davon, bei der Sie die Day-Klasse direkt importieren können

from pandas.tseries.offsets import Day

date1 = datetime(2011, 10, 10)
date2 = date1 + 5 * Day()

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