Dříve či později, každý programátor se musí vypořádat s časovými pásmy.
A opravdu moc nemůžu poskytnout radu; Mohu nabídnout odstrašující příklad.
Mohu vám říci, proč měli byste se neměly vůbec nikdy zabývat časovými pásmy, pokud tomu může pomoci.
Představte si, že někdo udělá aplikaci
která vám umožní spočítat, kolik sekund je něco v minulosti.
Zadáte datum a čas a vrátí vám počet sekund.
A lidé se na to podívají a řeknou jsi: „Dobře, pro mě to nějak funguje ...“
„Ale přidejme nabídku, která umožňuje změnit časové pásmo“
Takže pokud porovnáváte mezi současností v New Yorku a Londýnem, tak to zjistíte
A to je v pořádku - malá rozevírací nabídka vám dovolí změnit, kolik hodin napřed nebo za Greenwichem jste.
Skěvě.
Dříve či později, poté, co to začne být trochu populární, tak vám zavolají z Austrálie.
A Austrálie řekne „Brej den-“
- Nebudu zkoušet a mluvit s přízvukem.
Neměl bych mluvit s přízvukem.
Austrálie řekne: „Dobrý den!“
„Mimochodem, my jsme 9 a půl hodiny před Greenwichem.“
A programátor řekne: „Opravdu?“
"Jo, devět a půl hodiny."
„OK, přidám pro vás zvláštní případ. To je v pořádku.“
Trochu později vám někdo zavolá z Nepálu.
A řeknou: „Zdravím. My jsme Jsme 5 a čtvrt Hodiny před Greenwichcem.“
A oni(programátoři) na to: „Opravdu?“ „Jo, je to tak už věky! Jo 5 a čtvrt Hodiny!“
Skvěle. A dají tam zvláštní případ pro ně. A možná si vyhledají
seznam časových pásem. Oficiální seznam, který říká, jaké všechny jsou
a ujistí se, že pokrývají všechny časové zóny na světě.
A pak přijde na řadu na podzim
A dostanou hovor z Anglie.
A Anglie řekne: „Promiňte. Ehm, právě jsme hodinu mimo, co se děje?“
„Počkejte právě se posunul čas!“
„To je v pořádku - s tím jsme se už vypořádaly.“
„ Bereme na vědomí přechody času pro nás, a daly jsme to do aplikace!“
A Anglie řekne:„Ne. Víte, my přecházíme na zimní čas o týden dříve u nás.“
„Různí se to v závislosti na tom, kde žijete.“
„Posunuly jsme čas o hodinu zpět o týden dřív než vy.“
A v tomto bodě
se většinou programátor začne dřžet za hlavu
a uvědomí si, do čeho se uvrtaly.
A to je v pořádku! Dají to do aplikace
a vyřeší fakt že se den přechodu na zimní/letní čas v každé zemi liší .
Podívají se na kód jak to udělat, a zkopírují ho do té aplikace.
Pak jim zase zavolá někodo z jižní polokoule a řekne:
„Jo, my nepřesouváme zpět na podzim, my hodinu přidávame.“
„Naše jaro ... je v listopadu.“
V té chlívy (programátoři) začnou toužebně hledat jejich oblíbený intoxikant.
a přemýšlet, zda si dát frťana před tím než budou pokračovat
... a naprogramují to tam taky
Pak jim někdo zavolá z Samoi.
V Pacifiku na mezinárodní datové čáře.
A Samoa řekne: „Dobrý den!“
„Jo, přeskočili jsme den minulý rok.“
A programátor řekne: „Co???“
„Jo, jsme vynechal den. Posunuli jsme z 29.12.2011 na 31.12“
„Posunuli jsme z jedné strany mezinárodní datové čáry od bytí hodiny a hodiny za Greenwichem ...
..., k tomu že jsme hodiny a hodiny před Greenwichem. Pomáhá to při obchodu s Austrálií.“
„Můžete to vzít v úvahu, když budete počítat kolik sekund jsou časy v minulosti?“
[hluboký nádech] To je v pořádku, je soubor, který vám řekne,¨ kdy každá země změnila své časové pásmo.
Ukazuje se, že se to stává poměrně často.
ale změny jsou oznamovány v předstihu . Takže, pokud si máte ten soubor aktualizovaný
a taky to naprogramujete do logiky programu, jste v pohodě.
Potom se podíváte do minulosti a zjistíte, že během druhé světové války,
Anglie měla dvojitý britský letní čas.
Jelo se na Britský letní čas a pak jen přidaly další hodinu.
Takže byly 2. hodiny před Greenwichem přes to... že měly Greenwich.
To je v pořádku. Vyřešili jste to.
Všimli jste si, začal mluvit, jako bych to byl ty nebo já?
Protože jsem to už programoval předtím, a to je opravdu frustrující.
A ujistíte se že odebíráte seznam.
časů kdy země mění svá časová pásma - což se očividně stává hodně často!
Jako, někdy i několikrát do roka, protože se změní vláda.
A pak ten mytický programátor dostane hovor z Libye;
kde se roku 2013, s předstihem jen pár dní rozhodly že nebudou posouvat hodiny zpět
Bez toho aniž by věděli, že není možné, aby někdo to aktualizoval včas.
To znamená, že každý libyjský počítač, bez ohledu na to, jaký operační systém na něm běžel...
... byl o hodinu mimo.
To je v pořádku, přečtete si o tom v novinách a spěšně to naprogramujete do aplikace taky.
A pak, vám zavolá někdo ze Západního břehu Jordánu.
Kde Izraelská populace je na jiném časovém pásmu než Palestinská populace.
Proto že jedna následuje Izrael a druhá ne.
Nyní máte dvě populace lidí ve stejné lokalitě, kteří jsou v časových pásmech.
A teď se musí ptát sami sebe, jsou na tomhle časovém pásmu, nebo na tamtom, v závislosti na tom, kdo jsou a kde jsou.
A neexistuje žádný způsob, jak jak to naprogramovat do vašeho progamu! A pak...
vám zavolá historik.
Který říja: „dobře, Snažím se vypočítat nějaký časy zpátky v 18. století.“
„A vyměnili jsme juliánský kalendář za gregoriánský kalendář.“
„Není to tak, že by jsme ztratili asi tři týdny ...
... jen to, že jsme přeskočili z tohohle data na tohle datum, a vynechal ty mezi.“
„Můžete to naprogramovat tak, že to vyřeší a funguje i mě?“
Je to v pořádku, protože už vám někdo řekl, když tyto datumy jsou
a můžete to naprogramovat do logiky vašeho programu, taky
ale teď kód vypadá opravdu dlouze a složitě.
a je to zašmodrchaný bordel špagetového kódu, který nějak funguje
a pak vám zavolá ruský historik!
Který říká: „Jo, my přešly na gregoriánský kalendář až ve 20. století ...
... a ukazuje se že dny v kalendáři které vynecháte se mění podle lokality ...
... a můžete to vyřešit taky?“ A pak vám zavolá britský historik!
Který říká že, do... myslím že to bylo 16. století
Rok začínal 25. března!
Prostě vám z toho vybouchne mozek
Z 24. března 924
a pak by byl 25.březen, 925. A to je další den.
a tak máte přechod z 31. prosince 924, na 1. ledna 924, protože to tak jde v kalendáří!
Je to masině komplikované, A Pak ...
vam zavolá astrofyzik...
Který říká: „Mimochodem, právě jsme měli přestupnou sekundu!“
A v tomto bodě, si prostě řekne „... cože?!“
Přestupné sekundy; protože Země se neotáčí konstantní rychlosti.
Torochu zpomaluje a zrychluje, jak tektonické desky se pohybují
a magnetická pole se hýbou, nebo tak něco. A tak se občas
Mezinárodní astronomická unie zjišťuje že potřebujeme přestupnou sekundu.
Pokud tak je pak hodiny hodiny jdou 23:59:58
a pak je 23:59:59
a pak místo toho aby se šlo na [00:00:00] jako jakékoli rozumné časové pásmo
hodiny jdou na 23:59:60!
A všechno, se podělá, protože jste najednou máte 61 sekund v minutě!
Takže v závislosti na vaší implementaci, buď ...
... vaše hodiny budou jednu sekundu mimo synchronizaci se zbytkem světa
nebo se zopakují za sekundu.
Cesta jak se s tím chcete vypořádat je něco co se nazývá Unixové časové razítko.
A Numberphile, myslím o tom muvili už předtím.
Že máte tohle číslo, které začalo přesně v 1. sekundě roku 1970
a zvyšuje se o jednu za sekundu.
Neustále. Ťik. Ťik. Ťik.
A to je skvělé, protože to, co jste chtěl udělat, je vzít jakékoliv datum co vám kdo dal,
a přepočítat to na Unix časové razítko,
a to dát do vaší databáze.
A to prostě vyřeší přestupné sekundy
KROMĚ TOHO ŽE NEVYŘEŠÍ! Samozřejmě, že ne!
Protože máte univerzální koordinovaný čas
který zahrnuje přestupné sekundy!
A opakuje se občas, a prostě zahrnuje 23:59:60
a pak máte astronomický čas! Který nezahrnuje přestupné sekundy.
a neustále se roz-synchro-nizovává se zbytkem světa
protože se potřebujeme dívat na hvězdy a navrhovat dalekohledy kolem něj!
[Hluboký výdech]
A co se naučíte ...
Co se naučíte po vypořádávání se s časovými pásmy, je to, že co uděláte ...
... je dáte pryč váš kód ...
... nepokusíte se napsat cokoliv, co se s tím má vypořádat.
Podíváte se na lidi, kteří tam byli před vámi.
Podíváte se na první lidi, lidi, kteří to řešily už dříve.
lidi, kteří napsaly špagetový kód,
a velice jim poděkujete za to že je to volně dostupné (open source)
a uvedete je jako autory, a vezmete vše co udělali, a dáte to do svého programu,
a nikdy se na to znovu nepodíváte
protože ten druhý způbob je šílenství
Google má skutečně opravdu dobrý přístup k přestupným sekundám, který, vymysleli sami.
Je článek o tom na jejich blogu, který to myslím vysvětluje.
Nazývají to jako „přestupná šmouha.“
Protože mít 61 sekund v minutě,
nebo, donuťit hodiny vrátit se o sekundu zpět,
může být opravdu, ale opravdu špatné pro masivní společnost, které musí
vše synchronizovat opravdu přesně a musí věřit, že jeden kousek dat byl uložen před druhým,
v podstatě rozprostřou sekundu na celý den.
na ten den jejich hodiny pokaždé přidají mikrosekundu.
Ťik, ťik, ťik, po cely den .
Takže jsou někdy i o půl sekundy mimo realitu,
ale všechny jejich servery jsou o sekundu mimo.
Je to postavené tak, aby to bylo mimo synchronizaci s celým světem. Ale aspoň ví, že se jedna věc stala před druhou.
mít souvislost v datech je mnohem důležitější, než mít přesný čas