Jak określić różnicę czasu w minutach między dwoma datetime
obiektami?
python
datetime
date-arithmetic
Hobhouse
źródło
źródło
delorean
wprowadza w błąddatetime
,pytz
podejście np. przykładowy kod można zapisać jakod = datetime.now(timezone(EST))
(jeden czytelny wiersz zamiast pięciu).Nowością w Python 2.7 jest
timedelta
metoda instancji.total_seconds()
. Z dokumentacji Pythona jest to równoważne z(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
.Odniesienie: http://docs.python.org/2/library/datetime.html#datetime.timedelta.total_seconds
źródło
elapsedTime / timedelta(minutes=1)
różnicy w minutach w Pythonie 3Na przykładzie datetime
Czas trwania w latach
Czas trwania w dniach
Czas trwania w godzinach
Czas trwania w minutach
Czas trwania w sekundach
Czas trwania w mikrosekundach
Całkowity czas trwania między dwiema datami
lub po prostu:
Edytuj 2019 Ponieważ ta odpowiedź zyskała na popularności, dodam funkcję, która może uprościć korzystanie z niektórych
źródło
TypeError: 'float' object is not subscriptable
podczas używania dla:then = datetime(2017, 8, 11, 15, 58, tzinfo=pytz.UTC)
now = datetime(2018, 8, 11, 15, 58, tzinfo=pytz.UTC)
getDuration(then, now, 'years')
Po prostu odejmij jeden od drugiego. Dostajesz
timedelta
obiekt z tą różnicą.Można przekonwertować
dd.days
,dd.seconds
add.microseconds
do minuty.źródło
Jeśli
a
,b
to datetime obiektów następnie znaleźć różnicę czasu między nimi w Pythonie 3:We wcześniejszych wersjach języka Python:
Jeśli
a
,b
to naiwny datetime obiekty takie jak zwracane przezdatetime.now()
to wynik może być źle, jeśli obiekty reprezentują czasu lokalnego z różnych UTC offsety np całym DST przejściami lub dat ostatnich / przyszłych. Więcej informacji: Sprawdź, czy minęły 24 godziny między datami - Python .Aby uzyskać wiarygodne wyniki, użyj obiektów czasu UTC uwzględniających czas UTC lub strefę czasową.
źródło
Użyj divmod:
źródło
W ten sposób otrzymuję liczbę godzin, które upłynęły między dwoma obiektami datetime.datetime:
źródło
timedelta.seconds
podaje tylko liczbę sekund, które są wyraźnie przechowywane - co gwarantuje gwarancje w dokumentacji w ciągu mniej niż jednego dnia. Chcesz(after - before).total_seconds()
, co daje liczbę sekund obejmującą całą deltę.(after - before).total_seconds() // 3600
(Python 2.7) lub(after - before) // timedelta(seconds=3600)
(Python 3)Aby znaleźć liczbę dni: timedelta ma atrybut „dni”. Możesz po prostu zapytać o to.
źródło
Pomyślałem, że warto wspomnieć również o formatowaniu w odniesieniu do timedelta. strptime () analizuje ciąg reprezentujący czas zgodnie z formatem.
Spowoduje to wygenerowanie: 0: 05: 00.518000
źródło
Używam czegoś takiego:
źródło
return t1-t2
ma to na celu znalezienie różnicy między bieżącym czasem a godziną 9.30
źródło
To jest moje podejście przy użyciu mktime .
źródło
mktime()
oczekuje czasu lokalnego jako danych wejściowych. Czas lokalny może być niejednoznaczny imktime()
może w tym przypadku zwrócić błędną odpowiedź. Zamiast tego użyja - b
(a, b - obiektów daty i godziny) .mktime()
jest niepotrzebne i czasami jest złe. Nie używaj go w tym przypadku.W Inne sposoby, aby uzyskać różnicę między datą;
Więc uzyskaj wynik w min.
Dzięki
źródło
Różnice czasu wykorzystałem do ciągłych testów integracji w celu sprawdzenia i ulepszenia moich funkcji. Oto prosty kod, jeśli ktoś go potrzebuje
Za pomocą:
i mam coś takiego w danych wyjściowych dziennika
źródło
W oparciu o świetną odpowiedź @Attaque , proponuję krótszą uproszczoną wersję kalkulatora różnicy czasu / godziny :
Zmieniłem go, aby uniknąć deklarowania powtarzających się funkcji, usunąłem domyślny interwał drukowania i dodałem obsługę milisekund, tygodni i miesięcy ISO (miesiące mają tylko przybliżone, w oparciu o założenie, że każdy miesiąc jest równy
365/12
).Który produkuje:
źródło