{"id":419,"date":"2021-09-25T20:51:06","date_gmt":"2021-09-25T18:51:06","guid":{"rendered":"https:\/\/piotrgabriel.pl\/wiki\/?p=419"},"modified":"2021-09-25T20:51:06","modified_gmt":"2021-09-25T18:51:06","slug":"python-importujemy-calendar-kalendarz-i","status":"publish","type":"post","link":"https:\/\/piotrgabriel.pl\/wiki\/python-importujemy-calendar-kalendarz-i\/","title":{"rendered":"Python &#8211; importujemy calendar (kalendarz) i"},"content":{"rendered":"<div>Klasa kalendarza w Pythonie to bardzo przydatna rzecz, posiadaj\u0105ca przydatne funkcje zwi\u0105zane w\u0142a\u015bnie z kalendarzem.<\/div>\n<p><!--more--><\/p>\n<div>Jak podaje oficjalna dokumentacja Pythona ze strony docs.python.org w wersji 3 (tutaj dok\u0142\u0105dnie 3.9.7)<em>Modu\u0142 ten pozwala na wyprowadzanie kalendarzy, takich jak program Unix\u00a0<strong class=\"program\">cal<\/strong>\u00a0, i zapewnia dodatkowe przydatne funkcje zwi\u0105zane z kalendarzem.\u00a0Domy\u015blnie kalendarze te maj\u0105 poniedzia\u0142ek jako pierwszy dzie\u0144 tygodnia, a niedziel\u0119 jako ostatni (konwencja europejska).\u00a0S\u0142u\u017cy\u00a0<a class=\"reference internal\" title=\"kalendarz.setpierwszydzie\u0144 tygodnia\" href=\"https:\/\/docs.python.org\/3\/library\/calendar.html#calendar.setfirstweekday\" rel=\"nofollow noopener\" target=\"_blank\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">setfirstweekday()<\/span><\/code><\/a>do ustawiania pierwszego dnia tygodnia na niedziel\u0119 (6) lub dowolny inny dzie\u0144 tygodnia.\u00a0Parametry okre\u015blaj\u0105ce daty s\u0105 podawane jako liczby ca\u0142kowite.\u00a0Aby zapozna\u0107 si\u0119 z powi\u0105zan\u0105 funkcjonalno\u015bci\u0105, zobacz tak\u017ce\u00a0modu\u0142y\u00a0<a class=\"reference internal\" title=\"datetime: Podstawowe typy daty i godziny.\" href=\"https:\/\/docs.python.org\/3\/library\/datetime.html#module-datetime\" rel=\"nofollow noopener\" target=\"_blank\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">datetime<\/span><\/code><\/a>i\u00a0<a class=\"reference internal\" title=\"czas: dost\u0119p do czasu i konwersje.\" href=\"https:\/\/docs.python.org\/3\/library\/time.html#module-time\" rel=\"nofollow noopener\" target=\"_blank\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">time<\/span><\/code><\/a>.<\/em><\/p>\n<p><em>Funkcje i klasy zdefiniowane w tym module wykorzystuj\u0105 wyidealizowany kalendarz, obecny kalendarz gregoria\u0144ski rozszerzany w niesko\u0144czono\u015b\u0107 w obu kierunkach.\u00a0Odpowiada to definicji \u201eproleptycznego kalendarza gregoria\u0144skiego\u201d w ksi\u0105\u017cce Dershowitza i Reingolda \u201eCalendrical Calculations\u201d, gdzie jest to kalendarz bazowy dla wszystkich oblicze\u0144.\u00a0Lata zerowe i ujemne s\u0105 interpretowane zgodnie z norm\u0105 ISO 8601.\u00a0Rok 0 to 1 pne, rok -1 to 2 pne i tak dalej.<\/em><\/p>\n<\/div>\n<h2>Python calendar &#8211; jak zacz\u0105\u0107 z niego korzysta\u0107?<\/h2>\n<div>Poniewa\u017c calendar jest wbudowanym modu\u0142em Pythona, nie trzeba go doinstalowywa\u0107.<\/div>\n<div>Aby wi\u0119c zacz\u0105\u0107 wykorzystywa\u0107 jego mo\u017cliwo\u015bci, wystarczy w naszym programie &#8211;\u00a0 pliku z rozszerzeniem *.py &#8211; zwyczajnie zaimportowa\u0107 modu\u0142 calendar<\/div>\n<div><\/div>\n<div><code>import\u00a0calendar<\/code><\/div>\n<div><\/div>\n<div>Kolejno, jak zaimportowali\u015bmy modu\u0142 calendar, mo\u017cemy sprawdzi\u0107 dni tygodnia. Pos\u0142u\u017cy do tego funkcja <strong>weekneader()<\/strong>, czyli:<\/div>\n<div><\/div>\n<div><code>import calendar<\/code><br \/>\n<code>print(calendar.weekheader(9))<\/code><\/div>\n<div><\/div>\n<div>Wpisuj\u0105c w nawiazie liczb\u0119 9, czyli najd\u0142u\u017cszy string w\u015br\u00f3d nazw dni po angielski, zobaczymy wynikowo wszystkie dni tygodnia w pe\u0142nych nazwach, jak:<\/div>\n<div><strong>Monday Tuesday Wednesday Thursday Friday Saturday Sunday<\/strong><\/div>\n<div>natomiast zmieniaj\u0105c liczb\u0119 9 na 2, wynik b\u0119dzie wygl\u0105da\u0142 tak:<\/div>\n<div><strong>Mo Tu We Th Fr Sa Su<\/strong><\/div>\n<div><\/div>\n<h2>Poniedzia\u0142ek &#8211; pierwszy dzie\u0144 tygodnia, jak to zmieni\u0107?<\/h2>\n<p>Modu\u0142 calendar w Pythonie, domy\u015blnie korzysta z kalendarza europejskiego, co zosta\u0142o wyja\u015bnione na pocz\u0105tku tego postu. Je\u015bli jednak chcemy zmieni\u0107 ten dzie\u0144 na inny, na przyk\u0142ad niedziel\u0119, wystarczy skorzystac z funkcji <strong>setfirstweekday()<\/strong> i zmieni\u0107 go na niedziel\u0119 (sunday)<\/p>\n<p><code>import calendar<\/code><br \/>\n<code><strong># ustawimy teraz 1 dzie\u0144 tygodnia na niedziel\u0119<\/strong><\/code><br \/>\n<code>calendar.setfirstweekday(calendar.SUNDAY)<\/code><br \/>\n<code>print(calendar.weekheader(3)) <strong># liczba 3, ustawia d\u0142ugo\u015b\u0107 skrutu dnia do 3 liter<\/strong><\/code><\/p>\n<h2>Rok przest\u0119pny w funkcji <strong>isleap() oraz <\/strong>leapdays()<\/h2>\n<p>Aby sprawdzi\u0107 czy zadany rok jest rokiem przest\u0119pnym, wystarczy wykona\u0107 poni\u017cszy kod, korzystaj\u0105c z funkcji isleap()<\/p>\n<p><code>import calendar<\/code><br \/>\n<code>print(calendar.isleap(2021))<\/code><\/p>\n<p>Natomiast, je\u015bli chcieliby\u015bmy sprawdzi\u0107 to w szerszym zakresie, np od roku 1984 do roku 2021, zrobimy to za pomoc\u0105 <strong>isleapdays()<\/strong><\/p>\n<div><code>import\u00a0calendar<\/code><\/div>\n<div><code>checkleap\u00a0=\u00a0calendar.leapdays(1984,\u00a02021)<\/code><\/div>\n<div><code>print(\"Mamy\u00a0{}\u00a0dni\u00a0przest\u0119pne\u00a0mi\u0119dzy\u00a01984\u00a0a\u00a02021\u00a0rokiem\".format(checkleap))<\/code><\/div>\n<div><\/div>\n<h2>Kiedy wypada 1 dzie\u0144 danego miesi\u0105ca i ile ma dni w wybranym roku?<\/h2>\n<div>Ni\u017cej prze\u0107wiczymy kiedy wypada 1 dzie\u0144 ka\u017cdego miesi\u0105ca w 2022 roku. Pami\u0119tajmy jednak \u017ce liczymy zgodnie z indeksami, jak w tabelach, czyli od zera.<\/div>\n<div>Wi\u0119c poniedzia\u0142ek to 0, wtorek 1, \u015broda 2, czwartek 3, pi\u0105tek 4, sobota 5, niedziela 6.<\/div>\n<div><\/div>\n<div>\n<div>\n<div>\n<div><code>import\u00a0calendar<\/code><\/div>\n<div><code>print(calendar.weekday(2022,\u00a01,\u00a01))\u00a0#\u00a0rok,\u00a0miesi\u0105c\u00a0dzie\u0144,\u00a0kiedy\u00a0wypada\u00a01\u00a0stycznia?<\/code><\/div>\n<div><code>print(calendar.weekday(2022,\u00a02,\u00a01))\u00a0#\u00a01\u00a0dzie\u0144\u00a0lutego,\u00a0liczymy\u00a0od\u00a00<\/code><\/div>\n<div><code>print(calendar.weekday(2022,\u00a03,\u00a01))\u00a0#\u00a01\u00a0dzie\u0144\u00a0marca,\u00a0liczymy\u00a0od\u00a00<\/code><\/div>\n<div><code>print(calendar.weekday(2022,\u00a04,\u00a01))\u00a0#\u00a01\u00a0dzie\u0144\u00a0kwietnia,\u00a0liczymy\u00a0od\u00a00<\/code><\/div>\n<div><code>print(calendar.weekday(2022,\u00a05,\u00a01))\u00a0#\u00a01\u00a0dzie\u0144\u00a0maja,\u00a0liczymy\u00a0od\u00a00<\/code><\/div>\n<div><code>print(calendar.weekday(2022,\u00a06,\u00a01))\u00a0#\u00a01\u00a0dzie\u0144\u00a0czerwca,\u00a0liczymy\u00a0od\u00a00<\/code><\/div>\n<div><code>print(calendar.weekday(2022,\u00a07,\u00a01))\u00a0#\u00a01\u00a0dzie\u0144\u00a0lipca,\u00a0liczymy\u00a0od\u00a00<\/code><\/div>\n<div><code>print(calendar.weekday(2022,\u00a08,\u00a01))\u00a0#\u00a01\u00a0dzie\u0144\u00a0sierpnia,\u00a0liczymy\u00a0od\u00a00<\/code><\/div>\n<div><code>print(calendar.weekday(2022,\u00a09,\u00a01))\u00a0#\u00a01\u00a0dzie\u0144\u00a0wrze\u015bnia,\u00a0liczymy\u00a0od\u00a00<\/code><\/div>\n<div><code>print(calendar.weekday(2022,\u00a010,\u00a01))\u00a0#\u00a01\u00a0dzie\u0144\u00a0pa\u017adzniernika,\u00a0liczymy\u00a0od\u00a00<\/code><\/div>\n<div><code>print(calendar.weekday(2022,\u00a011,\u00a01))\u00a0#\u00a01\u00a0dzie\u0144\u00a0listopada,\u00a0liczymy\u00a0od\u00a00<\/code><\/div>\n<div><code>print(calendar.weekday(2022,\u00a012,\u00a01))\u00a0#\u00a01\u00a0dzie\u0144\u00a0grudnia,\u00a0liczymy\u00a0od\u00a00<\/code><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div><\/div>\n<div>Funkcja <strong>monthrange()<\/strong> pozwala spradzi\u0107, jak d\u0142ugi jest dany miesi\u0105c, czyli ile dni wypada w styczniu danego roku, lutym i tak dalej<\/div>\n<div><code>import calendar<\/code><br \/>\n<code>print(calendar.monthrange(2021, 9))<\/code><\/div>\n<div><\/div>\n<h2>Wydrukujmy kalendarz dla danego miesi\u0105ca i roku w pythonie<\/h2>\n<p>Na koniec sprawdzimy sobie, w jaki spos\u00f3b za pomoc\u0105 funkcji month() b\u0119dziemy mogli zobaczy\u0107 konkretny miesi\u0105c w przyjaznej dla oka formie \ud83d\ude42<\/p>\n<p>Mamy ni\u017cej te\u017c argument w (od width &#8211; szeroko\u015b\u0107) oraz l (od long\u00a0 &#8211; d\u0142ugo\u015b\u0107) &#8211; poeksperymentuj tymi warto\u015bciami. Liczba 9 przy themonth to warto\u015b\u0107, pozwalaj\u0105ca w j\u0119zyku angielskim zapisa\u0107 pe\u0142n\u0105 nazw\u0119 ka\u017cdego miesi\u0105ca.<\/p>\n<div><code>import calendar<\/code><\/div>\n<div>\n<div><code>print(calendar.month(theyear\u00a0=\u00a02021,\u00a0themonth\u00a0=\u00a09,\u00a0w\u00a0=\u00a05,\u00a0l\u00a0=\u00a01))<\/code><\/div>\n<div><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-420 aligncenter\" src=\"https:\/\/piotrgabriel.pl\/wiki\/wp-content\/uploads\/2021\/09\/themonth-python.png\" alt=\"\" width=\"383\" height=\"148\" title=\"\" srcset=\"https:\/\/piotrgabriel.pl\/wiki\/wp-content\/uploads\/2021\/09\/themonth-python.png 383w, https:\/\/piotrgabriel.pl\/wiki\/wp-content\/uploads\/2021\/09\/themonth-python-300x116.png 300w\" sizes=\"auto, (max-width: 383px) 100vw, 383px\" \/><\/div>\n<div><\/div>\n<div>Nie pozosta\u0142o nam nic innego jak sprawdzi\u0107, jak b\u0119dzie wygl\u0105da\u0142 pe\u0142en kalendarz na 12 miesi\u0119cy roku 2022<\/div>\n<\/div>\n<p><code>import calendar<\/code><br \/>\n<code>print(calendar.calendar(2022, w=2, l=2, c=2, m=6))<\/code><\/p>\n<p>w &#8211; szeroko\u015b\u0107<\/p>\n<p>l &#8211; d\u0142ugo\u015b\u0107 mi\u0119dzy ka\u017cdym ci\u0105giem<\/p>\n<p>c, m &#8211; liczba wierszy i kolumn<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-421 aligncenter\" src=\"https:\/\/piotrgabriel.pl\/wiki\/wp-content\/uploads\/2021\/09\/calendar-python-rok-2022.png\" alt=\"\" width=\"1193\" height=\"727\" title=\"\" srcset=\"https:\/\/piotrgabriel.pl\/wiki\/wp-content\/uploads\/2021\/09\/calendar-python-rok-2022.png 1193w, https:\/\/piotrgabriel.pl\/wiki\/wp-content\/uploads\/2021\/09\/calendar-python-rok-2022-300x183.png 300w, https:\/\/piotrgabriel.pl\/wiki\/wp-content\/uploads\/2021\/09\/calendar-python-rok-2022-1024x624.png 1024w, https:\/\/piotrgabriel.pl\/wiki\/wp-content\/uploads\/2021\/09\/calendar-python-rok-2022-768x468.png 768w, https:\/\/piotrgabriel.pl\/wiki\/wp-content\/uploads\/2021\/09\/calendar-python-rok-2022-820x500.png 820w\" sizes=\"auto, (max-width: 1193px) 100vw, 1193px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Klasa kalendarza w Pythonie to bardzo przydatna rzecz, posiadaj\u0105ca przydatne funkcje zwi\u0105zane w\u0142a\u015bnie z kalendarzem.<\/p>\n","protected":false},"author":1,"featured_media":421,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[28],"class_list":["post-419","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-python"],"_links":{"self":[{"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/posts\/419","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/comments?post=419"}],"version-history":[{"count":0,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/posts\/419\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/media\/421"}],"wp:attachment":[{"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/media?parent=419"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/categories?post=419"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/tags?post=419"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}