Podczas manipulacji datami i czasem w Pythonie, często napotkasz potrzebę obliczenia różnicy czasowej. Ten przewodnik pokaże Ci, jak wyznaczyć odstęp pomiędzy dwoma punktami czasowymi, wyrażony w godzinach, minutach i sekundach.
Po lekturze tego artykułu, zdobędziesz wiedzę na temat:
- Wykorzystania modułu datetime w Pythonie do operacji na datach i godzinach.
- Zrozumienia obiektów timedelta i ich zastosowania.
- Obliczania różnic czasowych pomiędzy dowolnymi dwoma punktami w czasie, w precyzyjnych jednostkach: godzinach, minutach i sekundach.
Zacznijmy naszą podróż.
Wykorzystanie modułu datetime w Pythonie
Moduł datetime jest kluczowy do pracy z datami i godzinami w Pythonie. Jest on integralną częścią standardowej biblioteki Pythona. Dzięki temu, możesz go od razu zaimportować do swojego środowiska pracy, używając poniższego polecenia:
import datetime
Aby wyliczyć różnicę czasową, musisz najpierw stworzyć dwa punkty czasowe. Możesz utworzyć:
- Dwa odrębne obiekty daty.
- Dwa odrębne obiekty czasu.
- Lub połączenie daty i czasu, czyli obiekty typu datetime.
Kreowanie obiektu daty w Pythonie
Zaimportujmy klasę date z modułu datetime. Obiekt daty w Pythonie tworzymy za pomocą składni datetime.date(
from datetime import date date1 = datetime.date(2022,3,27) print(date1) # Wynik: 2022-03-27
Możesz przetestować ten kod w kompilatorze online lub instalując Pythona na swoim komputerze.
Jak widać, data jest formatowana w standardzie RRRR-MM-DD.
Pamiętaj: Miesiąc musi być liczbą całkowitą, bez zer wiodących. Unikaj dodawania zera na początku numeru miesiąca, do którego mogłeś być przyzwyczajony.
Dla przykładu, czerwiec, szósty miesiąc, zapisz jako 6, a nie 06.
Próba uruchomienia poniższego kodu, w którym miesiąc jest oznaczony jako 03 zamiast 3, skutkuje błędem składni, jak widać poniżej:
date1 = datetime.date(2022,03,27) print(date1) # Komunikat błędu File "<ipython-input-12-6eb72084e6ce>", line 1 date1 = datetime.date(2022,03,27) ^ SyntaxError: invalid token
Przejdźmy teraz do tworzenia obiektów czasu w Pythonie.
Tworzenie obiektu czasu w Pythonie
Aby utworzyć obiekt czasu, zaimportujmy klasę time. Obiekt czasu generujemy, podając atrybuty klasy: godzina, minuta, sekunda i mikrosekunda.
Wszystkie te atrybuty są opcjonalne. Jeśli pominiemy któryś z atrybutów, na przykład sekundy, zostanie on domyślnie ustawiony na 0.
Poniższy fragment kodu pokazuje, jak stworzyć obiekt czasu o nazwie time1. Podobnie jak w przypadku obiektu daty, możemy go wydrukować, aby zobaczyć sformatowany czas.
from datetime import time time1 = datetime.time(13,27,45,4600) print(time1) # Wynik: 13:27:45.004600
Kreowanie obiektu datetime w Pythonie
Obiekt daty nie zawiera informacji o czasie. Podobnie, obiekt czasu nie niesie informacji o dacie.
W praktyce jednak często potrzebujemy obu tych informacji jednocześnie. Dlatego, zaleca się korzystanie z klasy datetime.
Klasę datetime i obiekty datetime możemy tworzyć jak w poniższym przykładzie:
dt1 = datetime.datetime(2022,3,27,13,27,45,46000) print(dt1) # Wynik: 2022-03-27 13:27:45.046000
Stwórzmy teraz obiekt datetime o nazwie dt2, bez podania sekund. Widać, że sekundy są ustawione na wartość 0, domyślnie.
dt2 = datetime.datetime(2022,6,30,14,28) print(dt2) # Wynik: 2022-06-30 14:28:00
Do tego momentu nauczyłeś się tworzyć punkty czasowe w Pythonie – daty, godziny i daty z godzinami. Teraz zobaczmy, jak obliczyć różnice pomiędzy dwoma punktami czasowymi.
Zapraszam do dalszej lektury.
Użycie obiektu timedelta w Pythonie
W Pythonie, timedelta reprezentuje interwał czasowy. Jest to różnica między dwoma obiektami: daty, czasu lub daty z czasem.
Kiedy dodajesz lub odejmujesz od siebie dwa obiekty daty, czasu lub daty z czasem, otrzymujesz obiekt timedelta. Ten obiekt posiada użyteczne właściwości i metody, które pomagają w wyliczeniu różnic czasowych.
Przejdźmy do obliczenia różnicy pomiędzy dwoma obiektami datetime: dt1 i dt2.
dt1 = datetime.datetime(2022,3,27,13,27,45,46000) dt2 = datetime.datetime(2022,6,30,14,28) tdelta = dt2 - dt1 print(tdelta) print(type(tdelta)) # Wynik 95 days, 1:00:14.954000 <class 'datetime.timedelta'>
Z powyższego kodu wynika, że zmienna tdelta zawiera różnicę czasową pomiędzy dt1 i dt2. Typ tdelta potwierdzamy, używając wbudowanej funkcji Pythona type().
Teraz napiszmy inny przykład.
Jak ustalić różnicę czasu między dwiema datami
Weźmy prosty, ale interesujący przykład.
Problem: Obliczyć różnicę czasu pomiędzy bieżącą datą a datą urodzin. Ustawmy dzisiejszą datę jako pierwszy punkt czasowy, a datę urodzin jako drugi.
W pierwszym kroku utworzymy dwa obiekty datetime:
- jeden na dziś, nazwijmy go today,
- drugi na urodziny, nazwijmy go bday.
Klasa datetime ma metodę now(), która zwraca aktualną lokalną datę i godzinę. Wykorzystajmy ją do uzyskania naszej daty referencyjnej – today.
today = datetime.datetime.now() print(today) # Przykładowy wynik: 2022-01-22 09:10:18.489538
W poniższym kodzie, zamień bday na swoją datę urodzin, aby obliczyć czas do Twoich urodzin w tym roku.
Jeśli czytasz to po swoich urodzinach, możesz ustawić datę bday na przyszłe urodziny.
bday = datetime.datetime(2022,8,30,11,59) print(bday) # Przykładowy wynik: 2022-08-30 11:59:00
Następnym krokiem jest obliczenie time_diff, który jest obiektem timedela, jak już wcześniej zostało wspomniane. Odejmij dzisiejszą datę od daty urodzin, aby uzyskać różnicę czasu.
time_diff = bday - today print(f"Twoje urodziny są za {time_diff}") # Wynik Twoje urodziny są za 220 days, 2:46:00.127416
Aby poznać liczbę dni do urodzin, wykorzystaj atrybut days w time_diff, jak poniżej:
tdays = time_diff.days print(f"Twoje urodziny są za {tdays} dni.") # Wynik Twoje urodziny są za 220 dni.
Jak uzyskać różnicę czasu w sekundach
Teraz obliczmy, ile sekund dzieli Cię od Twoich urodzin.
Aby obliczyć całkowitą różnicę czasu w sekundach, użyj metody total_seconds() w obiekcie timedelta o nazwie time_diff.
tsecs = time_diff.total_seconds() print(f"Do Twoich urodzin pozostało {tsecs} sekund.") # Wynik Do Twoich urodzin pozostało 19017960.127416 sekund.
Och, to długie oczekiwanie!
Jednak teraz już wiesz, jak obliczyć różnicę czasu między dwoma punktami czasowymi w sekundach.
Wróćmy do podstaw. Pamiętajmy, że dzień ma 24 godziny, godzina 60 minut, a minuta 60 sekund.
Prezentuje to poniższa grafika:
Godziny, minuty i sekundy
Aby przekształcić sekundy na minuty, godziny i dni, użyj poniższej tabeli i podziel przez odpowiedni współczynnik konwersji.
Tabela konwersji czasu
W kolejnych sekcjach skonwertujemy różnicę czasu w sekundach na minuty i godziny.
Jak wyznaczyć różnicę czasu w minutach
Aby uzyskać różnicę czasu w minutach, podziel całkowitą liczbę sekund przez 60.
Podzielmy tsecs przez 60 i zapiszmy wynik w zmiennej o nazwie tmins, w następujący sposób:
tmins = tsecs/60 print(f"Do Twoich urodzin pozostało {tmins} minut.") # Wynik Do Twoich urodzin pozostało 316966.0021236 minut.
Jak wyznaczyć różnicę czasu w godzinach
Teraz, gdy obliczyliśmy różnicę czasu w minutach, możemy podzielić ją przez 60, aby otrzymać różnicę w godzinach. Możemy też podzielić liczbę sekund przez 60*60 = 3600.
thrs = tsecs/(60*60) print(f"Do Twoich urodzin pozostało {thrs} godzin.") # Wynik Do Twoich urodzin pozostało 5282.76670206 godzin.
Teraz już wiesz, jak obliczyć różnicę czasu w wybranych jednostkach.
Podsumowanie
W tym samouczku nauczyłeś się:
- Tworzyć i zarządzać datami i godzinami z wykorzystaniem modułu datetime w Pythonie.
- Używać obiektów timedelta, aby uzyskać różnicę czasu.
- Obliczać różnice czasu w sekundach, minutach i godzinach.
Mam nadzieję, że ten przewodnik okazał się pomocny. Teraz, gdy posiadasz wiedzę o wyliczaniu różnic czasowych w Pythonie, zachęcam do ćwiczenia swoich umiejętności.
Życzę miłej nauki i udanego kodowania!
Odkryj, jak pisać równy lub nierówny kod lub jak utworzyć grę w węża w Pythonie.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.