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
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
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
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.
Pridajme do makra CompatibilityMode(True)
.
Sub formatCasDatum Dim aktualnyCas As Date CompatibilityMode(True) aktualnyCas = Now MsgBox "Aktualny datum: " & FormatDateTime(aktualnyCas,1) End Sub
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
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)
.