Mam datę "10/10/11(m-d-y)"
i chcę dodać do niej 5 dni za pomocą skryptu Python. Rozważ ogólne rozwiązanie, które działa również na koniec miesiąca.
Używam następującego kodu:
import re
from datetime import datetime
StartDate = "10/10/11"
Date = datetime.strptime(StartDate, "%m/%d/%y")
print Date
-> drukuje '2011-10-10 00:00:00'
Teraz chcę dodać 5 dni do tej daty. Użyłem następującego kodu:
EndDate = Date.today()+timedelta(days=10)
Który zwrócił ten błąd:
name 'timedelta' is not defined
name 'timedelta' is not defined
, oznacza to, żetimedelta
nigdzie nie zdefiniowałeś . Python jest zwykle bardzo pouczający o komunikatach o błędach.Odpowiedzi:
Poprzednie odpowiedzi są poprawne, ale ogólnie lepszą praktyką jest:
Będziesz miał, używając
datetime.timedelta
:źródło
strptime
metodę nadatetime
klasie wdatetime
module, więc musisz ją określićdatetime.datetime
.datetime
? Nie możesz polegać na konwencji, ale zawsze musisz spojrzeć na import.from datetime import DateTime
ponieważ klasy są w CamelCased, ale datetime poprzedza PEP8.Importuj
timedelta
idate
najpierw.I
date.today()
zwróci dzisiejszą datę i godzinę, może chceszźródło
date
obiekt nie matimedelta
metody. Jakiej wersji Python używasz?from datetime import timedelta, date; date.today() + timedelta(days=10)
Jeśli akurat używasz już pand , możesz zaoszczędzić trochę miejsca, nie określając formatu:
źródło
Chyba brakuje ci czegoś takiego:
źródło
Oto kolejna metoda dodawania dni z datą za pomocą relativedelta dateutil .
Wynik:
źródło
Jeśli chcesz teraz dodać dni, możesz użyć tego kodu
źródło
Oto funkcja uzyskiwania od teraz + określonych dni
Stosowanie:
źródło
Aby mieć mniej szczegółowy kod i uniknąć konfliktów nazw między datetime i datetime.datetime , należy zmienić nazwy klas na nazwy CamelCase .
Możesz więc wykonać następujące czynności, które moim zdaniem są wyraźniejsze.
Ponadto nie będzie konfliktu nazw, jeśli chcesz
import datetime
później.źródło
używając
timedelta
s możesz zrobić:źródło
Generalnie nie masz już odpowiedzi, ale może moja klasa, którą stworzyłem, również będzie pomocna. Dla mnie rozwiązuje wszystkie moje wymagania, jakie kiedykolwiek miałem w moich projektach Pyhon.
Jak tego użyć
self.tz = pytz.timezone("Europe/Warsaw")
- tutaj definiujesz strefę czasową, której chcesz użyć w projekcieGetDate("2019-08-08").current()
- spowoduje to konwersję daty ciągu na obiekt uwzględniający czas w strefie czasowej zdefiniowanej w pkt 1. Domyślny format ciągu możnaformat="%Y-%m-%d"
go zmienić. (np.GetDate("2019-08-08 08:45", format="%Y-%m-%d %H:%M").current()
)GetDate("2019-08-08").get_month_first_day()
zwraca podaną datę (ciąg lub obiekt) miesiąc pierwszy dzieńGetDate("2019-08-08").get_month_last_day()
zwraca podaną datę miesiąc ostatni dzieńGetDate("2019-08-08").minimum_time()
zwraca podaną datę rozpoczęcia dzieńGetDate("2019-08-08").maximum_time()
zwraca podaną datę koniec dniaGetDate("2019-08-08").time_delta_days({number_of_days})
zwraca podaną datę + dodaj {liczba dni} (możesz także zadzwonić:GetDate(timezone.now()).time_delta_days(-1)
na wczoraj)GetDate("2019-08-08").time_delta_haours({number_of_hours})
podobny do pkt 7, ale pracuje w godzinachGetDate("2019-08-08").time_delta_seconds({number_of_seconds})
podobny do pkt 7, ale działa na sekundyźródło
Od pewnego czasu musimy korzystać z wyszukiwania według daty i daty. Jeśli użyjemy date__range, musimy dodać 1 dzień z to_date, w przeciwnym razie zestaw zapytań będzie pusty.
Przykład:
od daty importu timedelta
from_date = parse_date (request.POST ['from_date'])
to_date = parsować_datę (request.POST ['to_date']) + timedelta (dni = 1)
lista obecności = models.DailyAttendance.objects.filter (attdate__range = [od_daty, do_daty])
źródło