Programovanie makier v LibreOffice: Tvorba vlastného dátumu a času

LO.png Naučte sa vytvoriť vlastný dátum a čas. Na tento účel využijeme funkcie DateSerial() a TimeSerial().  

Skladanie času a dátumu

Doteraz sme získavali z času a dátumu jednotlivé komponenty napr. minúty, hodiny či deň v mesiaci. Skúsme ísť nato z druhej strany, Vytvorme si s pomocou funkcii DateSerial() a TimeSerial() ľubovoľný dátum a čas.

Syntax funkcie DateSerial() a TimeSerial() je nasledovná:

DateSerial(rok, mesiac, deň)
TimeSerial(hodina, minúta, sekunda)

Návratový typ hodnoty oboch funkcii je Variant(Date).

Skúsme naprogramovať jednoduchý program, ktorý nám vytvorí vlastný dátum.

Sub tvorbaDatumu
Dim datum As Variant
datum = DateSerial(2018,06,20)
MsgBox datum
End Sub

Tvoríme si vlastný dátum Tvoríme si vlastný dátum

Ak chceme vypísať z novovytvoreného dátumu len rok, jediným argumentom funkcie Year() sa stane funkcia DateSerial() s vlastnými argumentmi.

Sub tvorbaDatumu
Dim datum As Variant
datum = Year(DateSerial(2018,06,20))
MsgBox datum
End Sub

Vypíšeme len rok Vypíšeme len rok

Čo ak zabudneme na argument charakterizujúci mesiac vo funkcii DateSerial()?

Sub tvorbaDatumu
Dim datum As Variant
datum = DateSerial(2018,20)
MsgBox datum
End Sub

Zabudli sme na jeden argument. Zabudli sme na jeden argument.

Výsledkom spustenia programu je chybová hláška. Preto je potrebné použiť všetky argumenty funkcie DateSerial().

Okrem toho je potrebné kontrolovať, či dátum je prípustný. Nemôžte vytvoriť dátum, ktorý pozostáva z 13 mesiaca, čo neodpovedá realite. Za skúšku nič nedáme a vytvorme program s nereálnym dátumom.

Sub tvorbaDatumu 
On Error Resume Next 
Dim datum As Variant
datum = DateSerial(2018,04,31)
MsgBox datum
End Sub

Nereálny dátum Nereálny dátum

Chyba sa ukrýva v tom, že mesiac apríl má 30 dní, nie 31!  Aby nám nespadol program, pridali sme On Error Resume Next. Presvedčme sa, že to tak platí.

Sub tvorbaDatumu 
Dim datum As Variant
datum = DateSerial(2018,04,30)
MsgBox datum
End Sub

Správny dátum Správny dátum

Podobne budeme postupovať pri funkcii TimeSerial(). Začneme ukážkou základného využitia funkcie TimeSerial().

Sub tvorbaCasu 
Dim cas As Variant
cas = TimeSerial(12,05,47)
MsgBox cas
End Sub

Vytvorili sme si vlastný čas Vytvorili sme si vlastný čas

Vypíšme len sekundy.

Sub tvorbaCasu 
Dim cas As Variant
cas = Second(TimeSerial(12,05,47))
MsgBox cas
End Sub

Vypísali sme len sekundy Vypísali sme len sekundy

Správanie programu pri zabudnutí nejakého argumentu je rovnaké ako u funkcii DateSerial(). Presvedčme sa!

Sub tvorbaCasu 
Dim cas As Variant
cas = TimeSerial(12,05)
MsgBox cas
End Sub

Zabudli sme na jeden argument Zabudli sme na jeden argument

Rozdiely medzi funkciami DateSerial() a TimeSerial() zatiaľ nie sú veľké. Je tomu tak i pri prekročení sekúnd? To znamená, že napíšeme argument sekúnd mimo interval 0-59.

Sub tvorbaCasu 
Dim cas As Variant
On Error Resume Next
cas = TimeSerial(12,20,63)
MsgBox cas
End Sub

Sekundy sú mimo interval 0-59 Sekundy sú mimo interval 0-59

Podľa dokumentácie môžeme prekročiť intervaly jednotlivých argumentov. Využili sme uvedený príklad v zmienenej dokumentácie a výsledok nás prekvapil. Zdá sa, že aktuálne po zadaní argumentu mimo interval nám program bez On Error Resume Next skončí s chybovou hláškou.

Existujú prípady, kedy nám program nespadne a skutočne sa správa podľa dokumentácie. Jeden takýto príklad si uvedieme.

Sub tvorbaCasu 
Dim cas As Variant
cas = TimeSerial(24,59,59)
MsgBox cas
End Sub

Príklad, kedy nám program nespadne Príklad, kedy nám program nespadne

Dynamická tvorba dátumu a času

Pod slovným spojením „dynamická tvorba“ rozumieme vytvorenie dátumu a času prostredníctvom premenných. Tu sa práve ukazuje najväčšia výhoda využitia funkcii DateSerial() a TimeSerial(). Pretože prináša možnosť vykonávať rôzne výpočty a podľa toho zobrazovať dátum a čas.

Sub tvorbaDatumuACasu 
Dim rok As Integer
Dim mesiac As Integer
Dim den As Integer
Dim datum As Variant

Dim hodina As Integer
Dim minuta As Integer
Dim sekunda As Integer
Dim cas As Variant

rok = Int((2018-2000+1)*Rnd+2000)
mesiac = Int((12-1+1)*Rnd+1)
den = Int((28-1+1)*Rnd+1)
datum = DateSerial(rok,mesiac,den)

hodina = Int((23-0+1)*Rnd+0)
minuta = Int((59-0+1)*Rnd+0)
sekunda = Int((59-0+1)*Rnd+0)
cas = TimeSerial(hodina,minuta,sekunda)

MsgBox datum & Chr(10) & cas
End Sub

Tvorba dátumu a času prostredníctvom premenných Tvorba dátumu a času prostredníctvom premenných

Dátum a čas sme vytvorili random spôsobom. Pre zjednodušenie sme vynechali jednotlive odlišností medzi počtom dní v mesiaci a zvolili sme interval 1-28 v premenne den.

(Jako ve škole) Průměr: 1.80 | Hodnotilo: 5
 

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