Programovanie makier v LibreOffice: Formátovanie dátumu a času

LO.png Po dlhšej odmlke prinášame ďalšie tipy na programovanie makier v LibreOffice. Objavte s funkciou FormatDateTime() možnosti jednoduchého formátovania času a dátumu.  

Formátovanie dátumu a času

Povedzme, že máte k dispozícii čas a dátum ako premennú typu Date v nejakom lokálnom nastavení a potrebujete ho zmeniť do inej podoby alebo rýchlo zobraziť len časť času resp. dátumu. Na vybratie formátu času alebo dátumu máme k dispozícii funkciu FormatDateTime(). Vytvorme makro, kde si vyskúšame jej možností.

Sub formatCasDatum
Dim aktualnyCas As Date
CompatibilityMode(True)
aktualnyCas = Now
MsgBox "Prvy format: " & FormatDateTime(aktualnyCas) & Chr(10) & "Ekvivaletny prvy format: " & FormatDateTime(aktualnyCas,0) & Chr(10) & "Druhy format: " & FormatDateTime(aktualnyCas,1) & Chr(10) & "Treti format: " & FormatDateTime(aktualnyCas,2) & Chr(10) & "Štvrty format: " & FormatDateTime(aktualnyCas,3) & Chr(10) & "Piaty format: " & FormatDateTime(aktualnyCas,4)
End Sub

01pics.png

Makro nám ukáže 5 možností využitia funkcie FormatDateTime(). Samotná funkcia FormatDateTime() má jeden povinný argument (píšeme ho ako prvý v poradí) a jeden nepovinný. Povinný argument je čas a dátum, ktorý chceme formátovať a úlohou nepovinného argumentu je funkcii povedať formát, ktorý si želáme. Prvý typ formátu je už nám známy. Tento formát vieme definovať aj s pomocou nepovinného argumentu s hodnotou 0. V druhom type formátu vidíme deň v týždni a mesiac v roku napísané slovom. Tretím formátom zvolíme len dátum bez časovej informácie. Štvrtá možnosť zobrazí len čas bez dátumu. Piata možnosť formátovania je rovnaká ako u štvrtej, ale bez prítomností sekúnd.

Odporúča sa pridať do makra CompatibilityMode(True), pretože bez toho funkcia FormatDateTime() nemusí fungovať a môže vám vypísať chybu.

Všimnite si, že interval nepovinného argumentu je v rozmedzí od 0 do 4. Čo by stalo, ak by sme tam dali číslo mimo intervalu? Chybová hláška! Presvedčme sa!

Sub formatCasDatum
CompatibilityMode(True)
Dim aktualnyCas As Date
aktualnyCas = Now
MsgBox "Mimo interval: " & FormatDateTime(aktualnyCas,5)
End Sub

02pics.png

Doteraz sme čas a dátum, ktorý sme chceli formátovať, získavali z funkcie Now(). Pravdepodobne takéto riešenie moc nevyužijete, pretože väčšinou ak pracujete s časom, tak si ho vytvárate sami pri rôznych druhoch spracovania. Vytvorme teda makro, ktoré vytvorí dátum a čas dynamicky podobne ako sme to urobili v predchádzajúcom článku.

Sub formatCasDatum
CompatibilityMode(True)
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

Dim vlastnyCas As Date

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)

vlastnyCas = datum & cas 

MsgBox FormatDateTime(vlastnyCas,1) & Chr(10) & FormatDateTime(vlastnyCas,3)

End Sub

03pics.png

Tvoriť dátum a čas dynamický znamená, že si ho vytvoríme sami kdekoľvek to potrebujeme a nemusíme využívať funkcie typu Now(). Po vytvorení čas a dátum uložíme do premeny typu Date a následne využitie funkcie FormatDateTime() by už nemalo robiť problém.

Je povinnosťou písať CompatibilityMode(True)?

Vráťme sa ešte ku CompatibilityMode(True). Síce sme zmienili, že bez napísania tejto formuly nemusí fungovať funkcia FormatDateTime() a celé makro skončí chybou. Skúsme sa pozrieť, ako to vlastne funguje vo verzii LibreOffice 6.0.5.2.

Vytvorme nové makro, ktoré spustíme.

Sub formatCasDatum
Dim aktualnyCas As Date
aktualnyCas = Now
MsgBox "Aktualny datum: " & FormatDateTime(aktualnyCas,1)
End Sub

Výsledkom je chybová hláška.

04pics.png

Pridajme do makra CompatibilityMode(True).

Sub formatCasDatum
Dim aktualnyCas As Date
CompatibilityMode(True)
aktualnyCas = Now
MsgBox "Aktualny datum: " & FormatDateTime(aktualnyCas,1)
End Sub

05pics.png

Zdá sa, že už to teraz funguje. Na záver pozorovania vymažme CompatibilityMode(True), zmeňme na iný formát a spusťme program.

Sub formatCasDatum
Dim aktualnyCas As Date
aktualnyCas = Now
MsgBox "Aktualny datum: " & FormatDateTime(aktualnyCas,2)
End Sub

06pics.png

Makro by malo fungovať bez problémov. To znamená, že prostredie si pamätá, že ste potvrdili kompatibilný mód. Z toho vyplýva, že pokým nevypnete LibreOffice, tak môžete spúšťať programy už bez potvrdzovania módu.

Môžete sa podeliť v diskusii pod článkom, ak máte podobné alebo iné skúseností s CompatibilityMode(True).

(Jako ve škole) Průměr: 1.00 | Hodnotilo: 2
 

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