ISO 8601
ISO 8601 je medzinárodný štandard, ktorý predpisuje formát dátumu a času. Tento predpis bol vydaný Medzinárodnou organizáciou pre normalizáciu. Odtiaľ aj skratka ISO.
Prečo práve spomíname túto normu? Pretože uľahčuje prechod medzi viacerými jazykovými a lokálnymi nastaveniami dátumu a času. Tento štandard zvyšuje prenositeľnosť medzi rôznymi konfiguráciami počítačov a to je už niečo, čo sa vám môže zísť.
Hlavná pointa je, že dátum začína od významnejších čísel po tie menej významné. Takže miesto 01.02.2016 je prevod do
ISO 8601 normy nasledovný: 20160201
. Čiže platný formát je YYYYMMDD
, kde Y
je
year, M
moon a D
day. Existujú k zápisu oddeľovače napr. YYYY-MM-DD
, ale je na
vás, či ich využijete, pretože sú dobrovoľné.
Funkcia CDateToISO
Chcete pohodlne previesť dátum na formu ISO 8601? Nie je žiadny problém, pri programovaní makier v LibreOffice vieme
využiť funkciu CDateToISO
.
Funkcia CDateToISO
má nasledovnú syntax:
CDateToISO(
číslo )
Program, ktorý si ukážeme, už dôverne poznáte z minulých dielov, ale je perfektný na ukazovanie fungovania niektorých funkcii.
01. príklad: Bližší pohľad na funkciu CDateToISO
Sub functionIsDateToISO REM začiatok makra On Error Resume Next REM ak nastane chyba, nech makro beží ďalej Dim i As Integer REM deklarácie premenných Dim retazec As String Dim pole() REM naplňujeme naše pole pole() = Array(Now,10.5,-1000,"1000","-1000","10.12.1989","10:21","11/12","10:20:55","11/5/1000","21/11/1987","11\11\1111","5 November, 1983 11:12:24","1983.12.12","12.12.1922 15:10:22","15:10:22 12.12.1922") REM v cykle experimentujeme s funkciou IsDate For i = LBound(pole()) To UBound(pole()) retazec = retazec & CStr(i+1) & ". " & pole(i) & " -> " retazec = retazec & CDateToISO(pole(i)) retazec = retazec & Chr(10) Next REM výpis na obrazovku MsgBox retazec End Sub REM koniec procedúry
Testujeme funkciu CDateToISO
Rozbor makra:
Pozrieme sa na jednotlivé prípady funkčností danej funkcie.
1. 28.02.2018 22:10:23 -> 20180228
– vidíte ako súčasný dátum zmeníte na ISO 8601 formu.
2. 10,5 -> 19000109
– rozpamätajte sa, ako zadávame číslo ako dátum a čas vo funkcii
CDate
3. -1000 -> 18970404
– záporne číslo? Žiadny problém s konverziou na ISO 8601
9. 10:20:55 -> 18991230
– ak nenapíšeme dátum, len čas, tak nám to vypľuje dátum, ako keby sme
funkcii CDate
napísali hodnotu 0.
11. 21/11/1987 -> –
nevyhovujúci formát dátumu, zavisí to od lokálneho nastavenia
16. 15:10:22 12.12.1922 ->
nevyhovuje formátu času a dátumu, najprv ide dátum a až tak čas
Funkcia CDateFromISO
Ak sme raz previedli dátum do ISO 8601 podoby, môžeme i späť? Áno môžeme a funkcia, ktorá sa presne o to stará sa
nazýva CDateFromISO
. Fungovanie tejto funkcie si samozrejme ukážeme v druhom príklade, ale najprv si
predstavme jednoduchú základnú syntax funkcie.
CDateFromISO(
reťazec )
Argumentom funkcie CDateFromISO
je dátum vo formáte ISO 8601 napísaný ako reťazec.
2. príklad: Ukážka funkcie CDateFromISO
Sub functionIsDateFromISO REM začiatok makra On Error Resume Next REM ak nastane chyba, nech makro beží ďalej Dim i As Integer REM deklarácie premenných Dim retazec As String Dim pole() REM naplňujeme naše pole pole() = Array(20101012,20160228,20160230,Now,10.5,-1000,"1000","-1000","10.12.1989","10:21","11/12","10:20:55","11/5/1000","21/11/1987","11\11\1111","5 November, 1983 11:12:24","1983.12.12","12.12.1922 15:10:22","15:10:22 12.12.1922") REM v cykle experimentujeme s funkciou IsDate For i = LBound(pole()) To UBound(pole()) retazec = retazec & CStr(i+1) & ". " & pole(i) & " -> " retazec = retazec & CDateFromISO(pole(i)) retazec = retazec & Chr(10) Next REM výpis na obrazovku MsgBox retazec End Sub REM koniec procedúry
Testovanie funkcie CDateFromISO
Rozbor makra:
2. 20160228 -> 28.02.2016
– úspešný prevod
3. 20160230 ->
– 30. február vážne neexistuje
4. 01.03.2018 00:30:54 -> –
tento prípad a všetky nasledujúce nepredstavujú zápis dátumu v ISO 8601
forme