Како израчунати временску разлику у Питхон-у

У раду са датумима и временима у програмском језику Python, често се јавља потреба за израчунавањем временских разлика. Овај водич пружиће вам знање о томе како да израчунате разлику између два временска тренутка, изражену у сатима, минутима и секундама.

Након проучавања овог водича, разумећете:

  • Како се користи Python-ов модул `datetime` за манипулацију датумима и временима.
  • Шта представљају `timedelta` објекти и колика је њихова корисност.
  • Како се израчунава временска разлика између било која два временска тренутка, изражена у сатима, минутима и секундама.

Започнимо.

Коришћење Python-овог модула за датуме и времена

За рад са датумима и временима у Python-у, користићете модул под називом `datetime`. Овај модул је саставни део стандардне Python библиотеке. Стога га можете одмах увести у ваш радни простор користећи следећу команду:

import datetime

Да бисте израчунали временску разлику, потребно је да имате две различите временске ознаке. Можете одабрати да креирате:

  • Два објекта типа датум.
  • Два објекта типа време.
  • Комбинацију објеката датума и времена, односно `datetime` објекте.

Креирање објекта датума у Python-у

Увезимо класу `date` из модула `datetime`. Да бисте креирали објекат датума у Python-у, можете користити општи облик `datetime.date(<година>, <месец>, <дан>)`. Ево примера креирања објекта датума `date1`:

from datetime import date
date1 = datetime.date(2022, 3, 27)
print(date1)

# Output: 2022-03-27

Можете испробати овај код на онлајн Python компајлеру или инсталирајте Python на ваш рачунар.

Као што је приказано, када се датум штампа, он је форматиран у YYYY-MM-DD формату.

Напомена: Месец је потребно унети као цео број, без водеће нуле. Вероватно сте навикли да додајете почетну нулу месецу када пишете датуме.

На пример, да бисте унели датум у јуну, 6. месецу у години, користите 6, а не 06.

Ако покушате да покренете следећи код, где је месец унет као 03 уместо 3, видећете да програм враћа синтаксну грешку:

date1 = datetime.date(2022, 03, 27)

print(date1)

# Error Message
File "<ipython-input-12-6eb72084e6ce>", line 1
    date1 = datetime.date(2022,03,27)
                                ^
SyntaxError: invalid token

Сада, погледајмо како се креира објекат времена у Python-у.

Креирање објекта времена у Python-у

Да бисмо креирали објекат времена, увезимо класу `time`. Објекат времена се креира помоћу класе `time`, навођењем следећих атрибута: сат, минут, секунда и микросекунда.

Сви ови атрибути су опциони. Ако не наведете одређени атрибут, на пример, секунду, његова подразумевана вредност ће бити 0.

Следећи код показује како можете креирати објекат времена `time1`. Као и код објекта датума, можете одштампати објекат времена да бисте видели форматирано време.

from datetime import time
time1 = datetime.time(13, 27, 45, 4600)
print(time1)

# Output: 13:27:45.004600

Креирање објекта датума и времена у Python-у

Објекат датума не садржи информације о времену, а објекат времена не садржи информације о датуму.

У пракси, често су вам потребне информације и о датуму и о времену. Због тога се препоручује коришћење класе `datetime`.

Можете приступити класи `datetime` и креирати `datetime` објекте на следећи начин:

dt1 = datetime.datetime(2022, 3, 27, 13, 27, 45, 46000)
print(dt1)

# Output: 2022-03-27 13:27:45.046000

Сада креирајмо још један `datetime` објекат `dt2` без атрибута секунде. Видећете да је постављен на 0 – подразумевана вредност.

dt2 = datetime.datetime(2022, 6, 30, 14, 28)
print(dt2)

# Output: 2022-06-30 14:28:00

Научили сте како се креирају временске ознаке у Python-у – као датуми, времена и датуми и времена. Сада ћемо видети како се израчунава разлика између било које две временске ознаке.

Пређимо на следећи одељак.

Коришћење `timedelta` објекта у Python-у

У Python-у, `timedelta` представља временски распон. То је разлика између два објекта датума, времена или датума и времена.

Када саберете или одузмете два објекта датума, времена или датума и времена, добијате објекат `timedelta`. Овај објекат има корисне атрибуте и методе који могу помоћи у израчунавању временске разлике.

Израчунајмо разлику између два `datetime` објекта `dt1` и `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)) 

# Output 
95 days, 1:00:14.954000 
<class 'datetime.timedelta'>

Променљива `tdelta` садржи временску разлику између `dt1` и `dt2`. Тип променљиве `tdelta` је `datetime.timedelta`, што је потврђено коришћењем функције `type()`.

Погледајмо још један пример.

Израчунавање временске разлике између два датума

Размотримо један једноставан, али интересантан пример.

Проблем: Израчунајте временску разлику између тренутног датума и вашег рођендана.
Да бисте то урадили, поставите данашњи датум као прву временску ознаку, а свој рођендан као другу временску ознаку.

Прво, креирајмо два објекта датума и времена:

  • један за данас, који ћемо назвати `today`, и
  • један за ваш рођендан, који ћемо назвати `bday`.

Класа `datetime` има метод `now()` који враћа тренутни локални датум и време. Користићемо га за `today` – наш референтни датум.

today = datetime.datetime.now()
print(today)

# Sample Output: 2022-01-22 09:10:18.489538

У коду испод, замените `bday` са вашим датумом рођења да бисте израчунали преостало време до вашег рођендана ове године.

Ако читате овај текст након што вам је рођендан прошао, можете поставити `bday` на ваш следећи рођендан.

bday = datetime.datetime(2022, 8, 30, 11, 59)
print(bday)

# Sample Output: 2022-08-30 11:59:00

Следећи корак је израчунавање `time_diff`, који је `timedelta` објекат. Једноставно одузмите `today` од `bday` и добићете временску разлику.

time_diff = bday - today
print(f"Ваш рођендан је за {time_diff}")

# Output
Ваш рођендан је за 220 days, 2:46:00.127416

Да бисте сазнали број преосталих дана, користите атрибут `days` на `time_diff`, као што је приказано:

tdays = time_diff.days
print(f"Ваш рођендан је за {tdays} дана.")

# Output
Ваш рођендан је за 220 дана.

Израчунавање временске разлике у секундама

Сада, израчунајмо колико је секунди преостало до вашег рођендана.

Да бисте израчунали укупну временску разлику у секундама, користите метод `total_seconds()` на `timedelta` објекту `time_diff`.

tsecs = time_diff.total_seconds()
print(f"До вашег рођендана је {tsecs} секунди.")

# Output
До вашег рођендана је 19017960.127416 секунди.

То је заиста дуго чекање!

Сада знате како да израчунате временску разлику између било које две временске ознаке у секундама.

Подсетимо се неких основа. Дан се састоји од 24 сата, сат траје 60 минута, а 60 секунди чини минут.

Ово је приказано на слици испод:

Сати, минути и секунде

Да бисте претворили из секунди у минуте, сате и дане, можете користити следећу табелу и поделити са одговарајућим фактором конверзије.

Табела конверзије времена

У следећим одељцима ћемо претворити временску разлику у секундама у минуте и сате.

Израчунавање временске разлике у минутима

Да бисте добили временску разлику у минутима, потребно је поделити укупан број секунди са 60.

Поделимо `tsecs` са 60 и ускладиштимо вредност у променљиву `tmins`:

tmins = tsecs/60
print(f"До вашег рођендана је {tmins} минута.")

# Output
До вашег рођендана је 316966.0021236 минута.

Израчунавање временске разлике у сатима

Сада када сте израчунали временску разлику у минутима, можете је поделити са фактором 60 да бисте добили разлику у сатима. Алтернативно, можете поделити укупан број секунди са 60 * 60 = 3600.

thrs = tsecs/(60*60)
print(f"До вашег рођендана је {thrs} сати.")

# Output
До вашег рођендана је 5282.76670206 сати.

Сада сте научили како да израчунате временску разлику у било којој јединици по вашем избору.

Закључак

У овом водичу сте научили како да:

  • Креирате и манипулишете датумима и временима користећи Python-ов `datetime` модул.
  • Користите `timedelta` објекте да бисте добили временски распон или временску разлику.
  • Израчунате временску разлику у секундама, минутима и сатима.

Надам се да вам је овај водич био користан. Сада када знате све о израчунавању временске разлике у Python-у, време је да увежбате своје вештине.

Срећно учење и кодирање!

Научите како се пише код за проверу једнакости или неједнакости или направите игру змија у Python-у овде.