Jeśli mam dwie daty (np. '8/18/2008'
I '9/26/2008'
), jaki jest najlepszy sposób na uzyskanie liczby dni między tymi dwiema datami?
506
Jeśli masz dwa obiekty daty, możesz je odjąć, co spowoduje obliczenie timedelta
obiektu.
from datetime import date
d0 = date(2008, 8, 18)
d1 = date(2008, 9, 26)
delta = d1 - d0
print(delta.days)
Odpowiednia sekcja dokumentów: https://docs.python.org/library/datetime.html .
Zobacz tę odpowiedź na inny przykład.
np.datetime64
dopython datetime
stackoverflow.com/questions/52982056/...Wykorzystując moc datetime:
źródło
date
wciąż brakuje własnego odpowiednikastrptime()
.strptime
sięformat
argumentu? Powinno być jasne z pierwszą datą arg, która ma format.Dni do Bożego Narodzenia:
Więcej arytmetyki tutaj .
źródło
Chcesz moduł datetime.
Inny przykład:
Jak wskazano tutaj
źródło
delta = today - last_year
print(delta.days)
źródło
abs()
, co jest przydatne, gdy porównywane daty są wcześniej nieznane i jest to różnica, którą jesteś zainteresowany. Jeśli druga datadatetime.strptime(date, date)
przypada później niż pierwsza data, wynik będzie ujemny.abs()
powoduje, że wszystkie dane wejściowe są bezwzględne (tj. pozytywne)Można to również łatwo zrobić za pomocą
arrow
:W celach informacyjnych: http://arrow.readthedocs.io/en/latest/
źródło
bez użycia Lib tylko czysty kod:
źródło
wszyscy doskonale odpowiedzieli na tę datę, pozwólcie, że spróbuję odpowiedzieć za pomocą pand
To da odpowiedź. W przypadku, gdy jednym z danych wejściowych jest kolumna ramki danych. po prostu użyj dt.days zamiast dni
źródło
Istnieje również
datetime.toordinal()
metoda, o której jeszcze nie wspomniano:https://docs.python.org/3/library/datetime.html#datetime.date.toordinal
Wydaje się, że dobrze nadaje się do obliczania różnicy dni, choć nie tak czytelny jak
timedelta.days
.źródło
(d1 - d0).days
zwraca0
,d1.toordinal() - d0.toordinal()
zwraca1
. Zależy od tego, czego potrzebujesz w rzeczywistym przypadku użycia.Do obliczania dat i godzin istnieje kilka opcji, ale napiszę prosty sposób:
Mam nadzieję, że to pomoże
źródło
Zakłada się oczywiście, że już sprawdziłeś, czy twoje daty są w formacie
r'\d+/\d+/\d+'
.źródło
map(int, s.split('/'))
. Nie do końca przełomowe, ale z drugiej strony to pytanie jest dość głupie. Moja odpowiedź pokazuje tylko inny sposób na skórowanie kota.Oto trzy sposoby rozwiązania tego problemu:
źródło