Mam dwa czasy, czas rozpoczęcia i zakończenia, w formacie 10:33:26 (HH: MM: SS). Potrzebuję różnicy między tymi dwoma czasami. Przeglądałem dokumentację Pythona i szukałem w Internecie i wyobrażałem sobie, że ma to coś wspólnego z modułami datetime i / lub time. Nie mogę zmusić go do prawidłowego działania i znajduję tylko, jak to zrobić, gdy w grę wchodzi randka.
Ostatecznie muszę obliczyć średnie z wielu okresów czasu. Mam różnice czasu do pracy i przechowuję je na liście. Muszę teraz obliczyć średnią. Używam wyrażeń regularnych, aby przeanalizować oryginalne czasy, a następnie wprowadzić różnice.
Czy w celu uśrednienia należy przeliczyć na sekundy, a następnie uśrednić?
python
time
python-2.6
Hanna
źródło
źródło
Odpowiedzi:
Tak, zdecydowanie
datetime
jest to, czego potrzebujesz tutaj. W szczególnościstrptime
funkcja, która analizuje ciąg znaków na obiekt czasu.Otrzymujesz
timedelta
obiekt, który zawiera różnicę między dwoma czasami. Możesz z tym zrobić, co chcesz, np. Zamienić to na sekundy lub dodać do innegodatetime
.Zwróci to wynik ujemny, jeśli czas zakończenia jest wcześniejszy niż czas rozpoczęcia, na przykład
s1 = 12:00:00
is2 = 05:00:00
. Jeśli chcesz, aby kod zakładał, że w tym przypadku interwał przekracza północ (tj. Powinien zakładać, że czas zakończenia nigdy nie jest wcześniejszy niż czas rozpoczęcia), możesz dodać następujące wiersze do powyższego kodu:(oczywiście musisz
from datetime import timedelta
gdzieś dołączyć ). Podziękowania dla JF Sebastiana za wskazanie tego przypadku użycia.źródło
days= -2
Hackowanie czasu ujemnego nie będzie działać, gdy i powyżej w obiekcie tdelta.days
nigdy nie może wynosić -2 lub mniej bez dodatkowych informacji (w szczególności dat) poza tym, co jest opisane w pytaniu. Więc ta sytuacja nie ma tutaj znaczenia.tdelta.total_seconds()
.Spróbuj tego - jest to skuteczne w przypadku krótkoterminowych wydarzeń. Jeśli coś zajmie więcej niż godzinę, ostateczny ekran prawdopodobnie będzie wymagał przyjaznego formatowania.
Różnica czasu jest zwracana jako liczba sekund, które upłynęły.
źródło
time.monotonic()
w Pythonie).time.time()
może cofać się (np. gdy zmienia się czas na maszynie, włączając poprawki NTP).Oto rozwiązanie, które obsługuje znajdowanie różnicy, nawet jeśli czas zakończenia jest krótszy niż czas rozpoczęcia (powyżej północy), na przykład
23:55:00-00:25:00
(pół godziny):Wynik
time_diff()
zwraca obiekt timedelta, który możesz przekazać (jako część sekwencji)mean()
bezpośrednio do funkcji, np .:mean()
Wynik jesttimedelta()
obiektem, który można przekształcić do kilku sekund (td.total_seconds()
metoda (od Pythona 2,7)), godziny (td / timedelta(hours=1)
(Python 3)), itd.źródło
Struktura reprezentująca różnicę czasu w Pythonie nosi nazwę timedelta . Jeśli masz
start_time
iend_time
jakodatetime
typy, możesz obliczyć różnicę za pomocą-
operatora takiego jak:powinieneś to zrobić przed konwersją do konkretnego formatu łańcucha (np. przed start_time.strftime (...)). Jeśli masz już reprezentację ciągu, musisz przekonwertować ją z powrotem na czas / datę i godzinę za pomocą metody strptime .
źródło
Ta strona mówi, aby spróbować:
To forum używa time.mktime ()
źródło
Podoba mi się, jak ten facet to robi - https://amalgjose.com/2015/02/19/python-code-for-calculating-the-difference-between-two-time-stamps . Nie jestem pewien, czy ma to jakieś wady.
Ale dla mnie wygląda schludnie :)
Jeśli chodzi o pytanie, które musisz użyć,
datetime.strptime()
jak powiedzieli wcześniej inni.źródło
Spróbuj tego
WYNIK :
źródło
wynik: 0 0 0 0 -47-37
źródło
Zarówno
time
idatetime
mają składnik daty.Zwykle, jeśli masz do czynienia tylko z częścią czasową, podaj domyślną datę. Jeśli interesuje Cię tylko różnica i wiesz, że oba czasy są tego samego dnia, skonstruuj a
datetime
dla każdego z dniem ustawionym na dzień dzisiejszy i odejmij początek od czasu zakończenia, aby uzyskać interwał (timedelta
).źródło
Przyjrzyj się modułowi datetime i obiektom timedelta. Powinieneś skończyć konstruowaniem obiektu daty i godziny dla czasów rozpoczęcia i zakończenia, a kiedy je odejmiesz, otrzymasz timedelta.
źródło
Zwięzłe, jeśli interesuje Cię tylko upływający czas poniżej 24 godzin. Możesz sformatować dane wyjściowe zgodnie z potrzebami w instrukcji return:
źródło