{"id":1068,"date":"2016-11-02T20:00:06","date_gmt":"2016-11-02T19:00:06","guid":{"rendered":"http:\/\/morony.pl\/?p=1068"},"modified":"2016-11-02T20:17:05","modified_gmt":"2016-11-02T19:17:05","slug":"reprezentacja-czasu-w-komputerze","status":"publish","type":"post","link":"https:\/\/morony.pl\/?p=1068","title":{"rendered":"Reprezentacja czasu w komputerze"},"content":{"rendered":"<p>Czas jest jednym z podstawowych &#8220;parametr\u00f3w&#8221; \u015bwiata, kt\u00f3ry na co dzie\u0144 wielokrotnie zapisujemy (zapami\u0119tujemy) i przeliczamy. Obecnie oznacza to, \u017ce jest przetwarzany przez komputery. Mog\u0142o by si\u0119 wydawa\u0107, \u017ce sprawa jest prosta, ale od razu wida\u0107 ca\u0142\u0105 mas\u0119 k\u0142opot\u00f3w. Pomys\u0142 na ten wpis wynika z bezsensownej zmiany czasu na zimowy w minion\u0105 niedziel\u0119. <\/p>\n<p><strong>Po pierwsze strefy czasowe.<\/strong> Dop\u00f3ki znajdujemy si\u0119 w jednej strefie czasowej wszystko jest ok, potrafimy bez problemu obliczy\u0107 r\u00f3\u017cnic\u0119 czasu pomi\u0119dzy dwiema datami. Do czasu: mamy przecie\u017c w Polsce dwie strefy czasowe &#8211; letni\u0105 i zimow\u0105. Je\u017celi interesuje nas dok\u0142adne obliczenie czasu to musimy te informacje uwzgl\u0119dnia\u0107. Rozwi\u0105zaniem tego problemu mo\u017ce by\u0107 zapami\u0119tywanie i obliczanie dat i czas\u00f3w w UTC (<a href=\"https:\/\/pl.wikipedia.org\/wiki\/Uniwersalny_czas_koordynowany\">Universal Time Coordinated<\/a>). Wiedz\u0119 na temat aktualnej w danym momencie i miejscu strefie czasowej najlepiej pobiera\u0107 z systemu operacyjnego, kt\u00f3ry powinien to &#8220;ogarnia\u0107&#8221;. Nie warto tego rozgryza\u0107 samemu, bo ilo\u015b\u0107 wyj\u0105tk\u00f3w jest powalaj\u0105ca. W tym miejscu polecam film <a href=\"https:\/\/www.youtube.com\/watch?v=-5wpm-gesOY\">The Problem with Time &#038; Timezones<\/a>.<\/p>\n<p>Do tej pory pami\u0119tam kartk\u00f3wk\u0119 z geografii w liceum na kt\u00f3rej liczyli\u015bmy czas podr\u00f3\u017cy samolotem z San Francisco to Tokio (i z powrotem) na podstawie godzin przylot\u00f3w i odlot\u00f3w. Jedynym rozwi\u0105zaniem gwarantuj\u0105cym dobry wynik by\u0142o przej\u015bcie do czasu UTC. <\/p>\n<p><strong>Po drugie format zapisu danych.<\/strong> Komputer operuje na liczbach a ludzie na ci\u0105gach znak\u00f3w. Istnieje wiele format\u00f3w zapisu daty i czasu w formie ci\u0105gu znak\u00f3w, ale to jest tylko reprezentacja &#8220;dla ludzi&#8221;. W pami\u0119ci data i czas mog\u0105 by\u0107 zapisane na wiele sposob\u00f3w, z kt\u00f3rych trzy s\u0105 moim zdaniem najwa\u017cniejsze:<\/p>\n<ul>\n<li>Mo\u017cemy pami\u0119ta\u0107 oddzielnie jako liczby ca\u0142kowite rok, miesi\u0105c, dzie\u0144, godzin\u0119, minut\u0119, sekund\u0119 i milisekund\u0119 (albo nanosekund\u0119 itp.) + dodatkowo kod strefy czasowej (zapisany np. w postaci liczby minut w stosunku do UTC). Taki spos\u00f3b jest dok\u0142adny i uniwersalny, ale ma\u0142o wydajny i pami\u0119cio\u017cerny. Kto\u015b jeszcze pami\u0119ta problem roku 2000?<\/li>\n<li>Drugim sposobem jest zapisywanie epoki unix, czyli ilo\u015bci sekund od 01-01-1970. Tu problemy s\u0105 dwa: stosuj\u0105c int32 mamy bardzo ograniczony zakres dat i dok\u0142adno\u015b\u0107 na poziomie sekundy.<\/li>\n<li>Trzecim sposobem, z kt\u00f3rym spotykam si\u0119 na co dzie\u0144 jest zapisywanie liczby zmiennoprzecinkowej okre\u015blaj\u0105cej dni od roku 0. Z tej metody korzysta Matlab. Zdecydowan\u0105 zalet\u0105 jest mo\u017cliwo\u015b\u0107 opisania dowolnej daty w historii i przysz\u0142o\u015bci wszech\u015bwiata oraz mo\u017cliwo\u015b\u0107 uwzgl\u0119dniania dok\u0142adno\u015bci sub-sekundowej. Wada tego zapisu wynika ze zmiennej dok\u0142adno\u015bci zapisu zmiennoprzecinkowego w zale\u017cno\u015bci od warto\u015bci &#8211; <a href=\"http:\/\/morony.pl\/?p=1017\">pisa\u0142em o tym kilka tygodni temu<\/a>.<\/li>\n<\/ul>\n<p>Zdecydowanie trzeci spos\u00f3b zapisu daty jest moim ulubionym &#8211; pozwala na bardzo szybkie operowanie na datach, bez utraty precyzji. Operacje na liczbach zmiennoprzecinkowych s\u0105 ca\u0142kowicie rutynowe, wi\u0119c ci\u0119\u017cko b\u0119dzie znale\u017a\u0107 co\u015b wydajniejszego. <\/p>\n<p>Bardzo wiele zale\u017cy od j\u0119zyka programowania, w ka\u017cdym jest inne podej\u015bcie. Szczeg\u00f3lnie w Pythonie wida\u0107 ogrom komplikacji. Jakie s\u0105 Wasze do\u015bwiadczenia? Z kt\u00f3rego formatu korzystacie najcz\u0119\u015bciej?<\/p>\n<p>Jako bonus chcia\u0142bym Wam pokaza\u0107 3 animacje mojego autorstwa. Pierwsza jest do\u015b\u0107 przewidywalna bo pokazuje czas trwania dnia w zale\u017cno\u015bci od dnia roku:<\/p>\n<p><center><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/n9A_EF33R94\" frameborder=\"0\" allowfullscreen><\/iframe><\/center><\/p>\n<p>Dwie kolejne s\u0105 ju\u017c du\u017co ciekawsze, poniewa\u017c pokazuj\u0105 czas wschodu i zachodu s\u0142o\u0144ca w lokalnej strefie czasowej.<\/p>\n<p><center><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/Glp0_rztfn8\" frameborder=\"0\" allowfullscreen><\/iframe><\/center><\/p>\n<p><center><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/ust45oxoMKg\" frameborder=\"0\" allowfullscreen><\/iframe><\/center><\/p>\n<p>Wida\u0107 wyra\u017anie zmian\u0119 czasu letniego na zimowy (w r\u00f3\u017cnym czasie zale\u017cnie od regionu) i s\u0142abe dopasowanie strefy czasowej w niekt\u00f3rych regionach. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Czas jest jednym z podstawowych &#8220;parametr\u00f3w&#8221; \u015bwiata, kt\u00f3ry na co dzie\u0144 wielokrotnie zapisujemy (zapami\u0119tujemy) i przeliczamy. Obecnie oznacza to, \u017ce jest przetwarzany przez komputery. Mog\u0142o by si\u0119 wydawa\u0107, \u017ce sprawa jest prosta, ale od razu wida\u0107 ca\u0142\u0105 mas\u0119 k\u0142opot\u00f3w. Pomys\u0142 na ten wpis wynika z bezsensownej zmiany czasu na zimowy w minion\u0105 niedziel\u0119. Po pierwsze [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts\/1068"}],"collection":[{"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1068"}],"version-history":[{"count":7,"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts\/1068\/revisions"}],"predecessor-version":[{"id":1075,"href":"https:\/\/morony.pl\/index.php?rest_route=\/wp\/v2\/posts\/1068\/revisions\/1075"}],"wp:attachment":[{"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1068"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1068"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/morony.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}