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')