Python — Triky s kalendářem

Zpět na blog

Python — Triky s kalendářem

python calendar workalendar datum ical

Pokud pracujete s daty, často potřebujete zjistit, jestli konkrétní datum spadá na víkend nebo státní svátek. Správné určení svátků a počtu pracovních dní může být složité. A pokud je potřebujete určit pro více zemí, může to být ještě komplikovanější.

Python má naštěstí ve svém arzenálu užitečné knihovny, které práci s daty a kalendářem zjednodušují. Kromě těch standardních jako je datetime nebo calendar, můžete funkcionalitu rozšířit pomocí mnoha dalších.

Jednou z nich je workalendar.

Workalendar

Workalendar nejen usnadňuje práci s kalendáři, ale obsahuje také seznam svátků a další užitečné funkce pro výpočty dat.

Pokud hledáte snadný způsob, jak získat odpovědi na otázky jako:

  • Kdy jsou státní svátky v příštím roce?
  • Kolik je pracovních dnů mezi 26. a 31.12.?
  • Kdy je první pracovní den po Silvestru?

tak vám tato knihovna nabídne pohodlný způsob, jak na ně získat odpověď.

V tomto článku se naučíte několik užitečných triků, které má workalendar ve svém repertoáru. A navíc si ještě vyzkoušíte šikovný, standardní calendar.

Instalace

Knihovnu workcalendar nainstalujete v terminálu pomocí příkazu pip, který je nejrozšířenějším správcem Python balíčků.

pip install workalendar

Pokud používáte správce balíčků conda, použijte následující příkaz:

conda install -c conda-forge workalendar

Import knihoven

Nejdříve naimportujte knihovny.

# Import knihoven
from workalendar.registry import registry
from workalendar.europe import CzechRepublic
from datetime import date
import calendar

Seznam zemí

Workalendar obsahuje seznam svátků pro více než 70 zemí.

# Seznam všech zemí, které knihovna obsahuje
from workalendar.registry import registry
for code, country in registry.get_calendars().items():
  print(code, country.name)
.. .......
HR Croatia
CY Cyprus
CZ Czech Republic
DK Denmark
EE Estonia
.. .......

Svátky v ČR

Jaké svátky se slaví v České republice? A kdy?

# Seznam svátků pro ČR
svatky = CzechRepublic()
rok = 2023
for svatek in svatky.holidays(rok):
  print(svatek[0], svatek[1])
2023-01-01 New year
2023-01-01 Restoration Day of the Independent Czech State
2023-04-07 Good Friday
2023-04-10 Easter Monday
2023-05-01 Labour Day
.......... ..........


Počet pracovních dnů mezi 2 daty

Užitečnou funkcí je kontrola počtu pracovních dnů mezi dvěma daty.

# Kolik je pracovních dnů mezi 26.12. a Silvestrem?
stepan = date(2023,12,26)
silvestr = date(2023,12,31)
print(svatky.get_working_days_delta(stepan, silvestr))
3

Kalendář

Python již v základu obsahuje knihovnu calendar, která umožňuje vytvářet kalendáře podobně jako unixový program cal a poskytuje další funkce související s kalendářem.

Vy ji použijete, abyste si ověřili, že předchozí příkaz ukázal správný počet dní.

# Vizuálně ověříme
print(calendar.LocaleTextCalendar(locale='cs_CZ').formatmonth(2023,12))
   prosince 2023
po út st čt pá so ne
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Najdi nejbližší pracovní den

Kdy je nejbližší pracovní den po Silvestru 2023? Určitě to bude v roce 2024...

# Najdi nejbližší pracovní den
print(svatky.add_working_days(silvestr,1))
2024-01-02

Výsledek si opět ověříme.

# Vizuálně ověříme
print(calendar.LocaleTextCalendar(locale='cs_CZ').formatmonth(2024,1))
     ledna 2024
po út st čt pá so ne
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

Najdi 2. pátek v měsíci červen

Na které datum připadá druhý pátek v červnu? To se dá v Pythonu zjistit mnoha způsoby, ale následující způsob patří mezi ty jednodušší.

# Najdi 2. pátek v červnu
print(
  svatky.get_nth_weekday_in_month(
    2023,  # Rok
    6,     # Měsíc
    4,     # Najdi pátek (4), 0 = Pondělí, 6 = Neděle
    2      # Kolikátý? Najdi druhý.
  )
)
2023-06-09

Nezapomene si ověřit výsledek.

# Vizuálně ověříme
print(calendar.LocaleTextCalendar(locale='cs_CZ').formatmonth(2023,6))
    června 2023
po út st čt pá so ne
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

Export do iCal

Příjemnou funkcí workcalendaru je možnost exportovat svátky do formátu iCal. Ten je standardem, který podporuje mnoho programů napříč operačními systémy. Svátky si tak snadno naimportujete do kalendáře na svém PC nebo mobilním telefonu.

# Zobrazení svátků pro rok 2024 ve formátu iCal
print(svatky.export_to_ical([2024]))
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//workalendar//ical 17.0.0//EN
BEGIN:VEVENT
SUMMARY:New year
DTSTART;VALUE=DATE:20240101
.....
# Export svátků pro rok 2024 do souboru iCal
svatky.export_to_ical([2024], target_path='cz2024.ics')

Líbil se vám článek? Sdílejte ho s ostatními

nebo nám napište něco hezkého. Děkujeme!

Zpět na blog

SQL pro každý den

Jak si užít SQL a nezabloudit v kódu

Zobrazit knihu

Python pro každý den

Jak si užít Python a nezabloudit v kódu

Zobrazit knihu

SQL pro analytiky 2 - pokročilí

Naučte se vytvářet složité dotazy, databázové objekty a používat pokročilé funkce jazyka SQL.

Zobrazit kurz

Hledáme další autory

Publikujte na Lovely Blogu a inspirujte ostatní! Sdílením svých znalosti si budujete osobní značku.

Kontaktujte nás

Odběr novinek

Novinky, návody a tipy přímo do vašeho emailu.

Copyright © 2018-2024, Colorbee, s.r.o.

Designed by grafikli.cz in Prague.