22.11.2024

D2000 a práca s časom

Ako funguje čas v D2000-ke? Aká je vnútorná reprezentácia? Podporuje D2000 rôzne časové pásma alebo letný/zimný čas? Tento článok sa pokúsi vysvetliť apoň niektoré záludnosti práce s časom za použitia podkladov prednášky vedúceho úseku vývoja D2000 Borisa Čonta s názvom “Práca s časmi v D2000”, ktorá odznela v rámci piatkových workshopov.

 

Základné pojmy

 

Koordinovaný svetový čas (Coordinated Universal Time – UTC ) je základný časový štandard založený na Medzinárodnom atómovom čase s priestupnou sekundou, ktorá sa aplikuje nepravidelne, aby sa dosiahla synchronizácia so spomaľujúcou sa rotáciou Zeme.

 

time1.png
Obr 1:  9:00 hodín UTC určuje ten istý časový okamih, či je to na Slovensku alebo v USA

 

Keďže ale Zem je guľatá a otáča sa okolo Slnka, používať UTC čas by bolo nepraktické. Ten istý údaj (dvanásť hodín UTC) by pre niektorých ľudí znamenal poludnie, pre iných ráno alebo večer – v závislosti na tom, v ktorej časti sveta (na ktorom poludníku) žijú. Preto boli zavedené časové pásma.

 

Časové pásmo (time zone) je geografický región, v rámci ktorého sa používa rovnaký štandardný čas. Mapa časových pásiem nekopíruje poludníky, ale zanáša geopolitické vplyvy (viď napr. Rusko alebo Čína). Časové pásmo okolo nultého poludníka sa nazýva Greenwich Mean Time (GMT).

 

time2.gif
Obr 2: mapa časových pásiem 

Časový offset (time offset) – parameter časového pásma, ktorý definuje časový rozdiel medzi aktuálnym časom v časovom pásme a UTC časom (obvykle v celých hodinách) . Časové pásmo GMT má časový offset 0, časové pásmo Stredná Európa (Central European Time - CET), v rámci ktorej sa nachádza aj Slovensko, má 1 hodinu. Krajiny na východ od nultého poludníka majú časový offset kladný, na západ záporný.

 

Na zistenie časového offsetu slúži v D2000 funkcia %GetTimeZone, ktorá vracia rozdiel v sekundách (3600 pre CET).

 

time3.png
Obr 3: 9:00 UTC zodpovedá 10:00 CET

 

Vo viacerých krajinách sa v minulosti začal v lete posúvať čas dopredu (z dôvodu lepšieho využitia doby so slnečnými svitom). Zaviedol sa tzv. letný čas.

 

Letný čas (Daylight saving time – DST) je obdobie v rámci časovej zóny, počas ktorého je k časovému offsetu zóny pripočítaný čas – zvyčajne 1 hodina. Na Slovensku sa začína letný čas poslednú marcovú nedeľu a končí poslednú októbrovú nedeľu.

 

Zimný čas je obdobie, počas ktorého nie je platný letný čas :)

 

time4.png
Obr 4: 9:00 UTC zodpovedá 10:00 CET (čas na Slovensku v zime) resp. 11:00 CET DST (čas na Slovensku v lete)

 

Reprezentácia času

 

Sú dva základné spôsoby, ako sa dá reprezentovať čas:

  • Vzdialenosťou od určitého dohodnutého bodu na časovej osi v dohodnutých časových jednotkách. V praxi je to obyčajne počet sekúnd s určitou presnosťou. Dohodnutý počiatok sa umiestňuje na UTC časovú os (napríklad Unixový čas sa počíta od 1.1.1970 00:00:00 UTC).
  • Vyjadrením jeho jednotlivých zložiek (zložkový čas). Pri takomto vyjadrení času je nutné poznať časovú zónu a DST.
time5.png
Obr 5: modrý krúžok zodpovedá začiatku Unixového času (1.1.1972 UTC). Ten istý časový bod je možné vyjadriť ako 8:00 UTC resp. 10:00 UTC+02 (východoeurópska zóna EET).

Prechod medzi zimným a letným časom

 

Nasledujúci obrázok ukazuje, ako funguje prechod na letný čas (DST) a späť v časovom pásme CET. Pri prechode na letný čas sa vynecháva druhá hodina ráno (tj. po sekunde 01:59:59 nasleduje sekunda 03:00:00). Pri prechode z letného na zimný čas sa naopak druhá hodina vkladá dvakrát, t.j. po 01:59:59 nasleduje 02:00:00, 02:00:01 .. atď až 02:59:59 a potom 02:00:00 a zase 02:00:01 až 02:59:59 a potom 03:00:00.

 

time6.png
Obr 6: prechod zimného času na letný (vľavo) a naopak (vpravo). Červená os udáva UTC čas, čierna lokálny ovplyvňovaný DST. Na rozlíšenie „prvej“ a „druhej“ 2.hodiny je použitý zápis A2 a B2.

 

V rámci EU sa prechod času deje naraz - o 01:00 UTC (t.j. o 2:00 CET a o 3:00 EET) sa vykoná skok dopredu (prechod na letný čas) alebo dozadu (na zimný čas). Takže rozdiel medzi CET a GMT ako aj medzi EET a CET je vždy 1 hodina.

 

 V USA (ktoré zahŕňajú 5 kontinentálnych časových pásiem + ďalšie pre Havajské ostrovy) sa prechod deje vždy o 2. hodine lokálneho času, takže prechod časov je “postupný” a rozdiel medzi hraničiacimi časovými pásmami je väčšinou 1 hodina, ale pri prechode časov je 0 alebo 2 hodiny.

 

Pre zaujímavosť – Austrália má tri časové pásma, ale niektoré štáty letný čas nepoužívajú (Queensland UTC+10, Severné teritórium UTC+9:30, Západná Austrália UTC+8), iné áno (Južná Austrália UTC+9:30 – UTC+10:30, Tasmánia/Viktória/Nový Južný Wales UTC+10 – UTC+11).  Takže výsledkom sú 3 rôzne časy v zime a 5 rôznych časov v lete. Navyše, v (austrálskom) lete je v Južnej Austrálii o 30 minút viac ako v Queenslande, hoci je táto viac na západ (a malo by tam byť teda menej).

 

Ako sa s prechodom letného a zimného času vyrovnáva D2000-ka? V grafoch sa vypúšťa, prípadne zdvojuje druhá hodina v noci.

 

time7.png
Obr 7: graf vľavo zobrazuje prechod na letný čas (marec, chýba druhá hodina). Vpravo je prechod na zimný čas (október, dve druhé hodiny).

Podobne vidieť zdvojenie druhej hodiny napr. v tabuľkách archívnych hodnôt:

 

time8.png
Obr 8: zdvojená druhá hodina pri prechode na zimný čas. Po 2:59 ide opäť 2:00

 Z pohľadu prechodov zimný-> letný -> zimný čas sú zaujímavé periodické deje. Čo znamená každých osem hodín ? Pri prechode na letný čas je to 0:00, 8:00, 16:00 alebo 0:00, 9:00, 17:00? Čo je dobre?

 

Odpoveď na túto otázku sa dozviete v ďalšej časti článku o týždeň.

 

8,1.2018, Ing. Peter Humaj, www.ipesoft.com

 

Iné blogy