Jak obliczyć różnicę czasu w Pythonie?

Photo of author

By maciekx

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(,,). Poniżej prezentujemy przykład utworzenia obiektu daty o nazwie data1:

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