Programovanie makier v LibreOffice: Časové funkcie

LO.png V tomto článku sa bližšie pozrieme na časové funkcie. A to nie je všetko. Ukážeme si vytvorenie jednoduchých stopiek.  

Funkcie Year, WeekDay a DateValue

O čase a dátume v makrách sme už letmo nahliadli v skorších častiach seriálu. Sám ale cítim, že do tejto oblasti treba nahliadnuť podrobnejšie a taktiež je potrebné si ukázať ďalšie funkcie z tejto oblastí.

Zopakujme si, ako sa pozeráme na dátum v makre. Začiatok kalendára vo funkcii CDate sa datuje 31. december 1899.  To znamená, že číslo 1 je 0. hodina, 0 minút dňa 31. decembra 1899.

Čo myslíte, akú hodnotu získame pri desatinnom čísle 1.1?  2 hodina, 40 minút dňa 31. decembra 1899. Každý desatinný dielik predstavuje 2 hodín a 40 minút. To je všetko, čo sme si zatiaľ prebrali.

Sú ešte nejaké možností alebo funkcie na prácu s časom? Áno, v tomto článku si ich pár ukážeme. Taktiež i v budúcom článku niečo ďalšie spomenieme.

Vytvoríme si makro, kde využijeme funkcie Year. WeekDay a DateValue.

1. program Využitie funkcie Year, WeekDayDateValue.

Sub DatumFunkcie   REM začiatok procedúry
 Vstup = InputBox("Zadajte dátum v tvare: dd.mm.rrrr")   REM vstup od užívateľa
 If Not IsDate(Vstup) Then   REM podmienka
 MsgBox("Zadal si zlý formát dátumu! Skus ma ešte raz zapnúť")   REM výpis na obrazovku
 Exit Sub   REM koniec makra, ak je podmienka splnená
 End If   REM koniec podmienky
 Datum = DateValue(Vstup)   REM zmena textu na dátum 
 MsgBox("Rok: "&Year(Datum)&Chr(10)&"Den v týždni: "&WeekDay(Datum))   REM výpis 
        a použitie funkcii 
 End Sub   REM koniec procedúry

Vstup od užívateľa Vstup od užívateľa

Výsledok Výsledok

Rozbor makra:

Makro začne vstupom od užívateľa, následne otestuje, či užívateľ napísal správny formát dátumu. Ak nie, makro sa skončí.

Makro ďalej pokračuje tým, že premení textovú premennú na dátum pomocou funkcie DateValue a následne pri vypíse využíjeme funkciu Year a WeekDay.

Funkcia Year nájde rok v dátume, funkcia WeekDay vypočíta deň v týždni. Rozsah návratovej funkcie je od 1 do 7, kde 1 je nedeľa, 2 je pondelok až po 7 je sobota.

Funkcie Hour a Minute

Nebudeme to zdržovať, rovno si pozrieme ukážku makra:

2. program: Využitie funkcie HourMinute.

Sub CasFunkcie   REM začiatok procedúry
 Vstup = InputBox("Zadajte čas v tvare hh:mm")   REM vstup od užívateľa
 If Not IsDate(Vstup) Then   REM podmienka
 MsgBox("Zadal si zlý formát času! Skus ma ešte raz zapnúť")   REM výpis od užívateľa
 Exit Sub   REM ak splnená podmienka, koniec makra
 End If   REM koniec podmienky
 Cas = TimeValue(Vstup)   REM premena textu na čas
 MsgBox("Hodina: "& Hour(Cas)&Chr(10)&"Minuta: "&Minute(Cas))   REM výpis na obrazovku 
        a použitie funkcii
 End Sub   REM koniec procedúry

Vstup od užívateľa Vstup od užívateľa

Výsledok Výsledok

Rozbor makra: Spočiatku užívateľ zadá čas vo formáte hh:mm. Funkcia IsDate skontroluje, či je to skutočne čas. Ak nie, makro skončí.

Pokračuje sa konverziou textu do času pomocou funkcie TimeValue. Následne výpis na obrazovku s funkciami Hour a Minute. Ako ich anglicky názov indikuje, funkcia Hour ukazuje hodiny a Minute minúty.

Stopky pomocou funkcie Timer

Vytvoríme si makro, ktoré nám odmeria čas.

3. program Využitie funkcie Timer

Sub Stopky   REM začiatok procedúry
 MsgBox "Stísknite tlačítko OK a spustite odpočítavanie"   REM výpis na obrazovku
 Start = Timer   REM využitie funkcie Timer
 MsgBox "Stísknite tlačítko OK a prerušite odpočítavanie"   REM výpis na obrazovku
 Koniec = Timer   REM využitie funkcie Timer
 Vysledok = Koniec-Start   REM spočítanie intervalu
 MsgBox "Dĺžka odpočítavania v sekundách je: "&Vysledok   REM výpis výsledku
 End Sub   REM koniec procedúry

Začiatok odpočítavania Začiatok odpočítavania

Koniec odpočítavania Koniec odpočítavania

Výsledok Výsledok

Rozbor makra: Po spustení makra sa vytvorí prvé dialógové okno, ktoré nás informuje o stlačení tlačítka OK a ak užívateľ stlačí OK, tak sa spustí odpočítavanie. Druhé dialógové okno nás požiada o zastavení počítania časového intervalu. Je na užívateľovi, kedy ho zastaví. Nakoniec sa zobrazí informácia o dĺžke intervalu odpočítavania. Tieto jednoduché stopky sme dokázali vytvoriť pomocou funkcie Timer. Návratová hodnota funkcie Timer je aktuálny čas. Po odčítaní druhého časového záznamu s prvým dostaneme uplynulý interval v sekundách.

(Jako ve škole) Průměr: 4.00 | Hodnotilo: 8
 

Komentáře

user avatar neutr
Odpovědět
Programovanie makier v LibreOffice: Časové funkcie
24. 08. 2016, 12:25:19
Edo nezlobte se ale stopky s přesností na vteřiny nejsou stopky. Na to existuje jiná funkce i když to není také úplně přesně.


Tou funkcí je GetSystemTicks() (cca 1/1000 sec) a je to dost dobře možné výsledek vydělit v/1000 a vyjdou celé vteřiny včetně tisícin. Problém je s tím, že Ticky umí započítat (stejně jako Timer()) různě stejný proces podle spuštěných úloh. první spuštění je vždy trošku delší. Teprve opakovaně lze najít skutečnou hodnotu. To je samozřejmě důležité až při ladění.

Jinak velmi pěkné - děkujeme.
user avatar Eduard Boldižár
Odpovědět
Re:Programovanie makier v LibreOffice: Časové funkcie
24. 08. 2016, 14:36:49
Aha, vďaka za pripomenienku, s funkciou GetSystemTicks() som ešte neexperimentoval. Iste v budúcnosti túto funkciu spomeniem.
user avatar lp.
Odpovědět
Programovanie makier v LibreOffice: Časové funkcie
25. 08. 2016, 11:21:30
První příklad se mi také moc nelíbí - den v týdnu dává nějaké číslo, fakticky o 1 vyšší než je v kraji zvykem.

Obvykle používám WeekDay(Datum-1)) pokud chci rychle dostat obvyklé číslo nebo raději Format(Datum, "dddd") - nechci přetěžovat uživatele dodatečnými počty.

Možná by také stálo za zmínku, co se stane, když se zadá datum jinak - lépe je to vidět, výstupem pokud je
MsgBox(format(Cas, "d.m.r dddd"))

pár zajímavých datumů:

1.leden 2016

12.8.26
12.8.36
12.8.126

5.10.1582
9.10.1582
13.10.1582
15.10.1582


Druhý příklad. Pokud se někdo přehlédne a zadá místo času datum, IsDate chybu nepozná a program havaruje.

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky astrotech.cz. Mám 24 rokov. Čas trávim v IT škole. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.

 
 
 
woo jaw demo hz