Zmena času po hodinách

Chcel by som sa opýtať na správny spôsob zmeny času v D2000 ESL po hodinách. Aké funkcia v D2000 má byť použitá ak chcem napr. v cykle v rámci roka zvyšovať čas o hodinu, pričom chcem aby som prešiel všetky hodiny aj v dňoch kedy dochádza k zmene zimný / letný čas a naopak? Použitie funkcií %AddTime alebo vytváranie času cez %NewTIme podľa mňa nefunguje vždy správne.

Pre tento typ práce z časom je potrebné použiť funkciu %AddIntervalMono. Táto sa pozerá na čas ako na monotónne plynúcu veličinu. Funkcie %AddTime a %NewTime interne pracujú podobne ako funkcia %AddIntervalLocal.

Názorný rozdiel medzi týmito funkciami vidieť pri prechodoch času letný – zimný, resp. zimný – letný.

Príklad:

Kedy sa začína nasledujúca (8 hodinová) zmena ak aktuálna začala 30.03.2019 22:00:00? Logická odpoveď je 31.03.2019 06:00:00. Treba si však uvedomiť, že práve počas nej nastane posun času z 2:00 na 3:00 a teda zmena ma v skutočnosti 7 hodín.

Túto skutočnosť akceptuje práve funkcia %AddIntervalLocal

TIME _zmena1, _zmena2Local, _zmena2Mono

_zmena1 := %StrToTimeEx("30.03.2019 22:00:00", "dd-mm-rrrr hh:mi:ss")
_zmena2Local := %AddIntervalLocal(_zmena1, 8*3600)
_zmena2Mono := %AddIntervalMono(_zmena1, 8*3600)

Výsledné hodnoty budú

_zmena2Local = 31-03-2019 06:00:00.000
_zmena2Mono = 31-03-2019 07:00:00.000

V tomto prípade má teda pravdu funkcia %AddIntervalLocal.

Pri hodinových (a menších) posunoch tento rozdiel medzi funkciami zaniká.

PS: Celkom dobré čítanie na túto tému je aj tu:

2 Likes

Slovenská verzia blogu je tu: