Jak na datum a čas nejenom v ASP – převody

26. května 2000

Dnes nás čeká zakončení miniseriálu o práci s datem a časem pomocí ASP. Ukážeme si převod času, formát datumu a nakonec vám předvedu jednoduché stopky na počítači.

Funkce TimeSerial a DateSerial

Funkce TimeSerial „poskládá“ ze zadaných hodin, minut a sekund čas, který vrátí jako proměnnou typu Time:

cas=timeserial(hodina,minuta,vterina)

Funkce DateSerial „poskládá“ ze zadaného dne, měsíce a roku datum, které je vráceno jako proměnná typu Date:

cas=dateserial(rok,mesic,den)

Zajímavou vlastností funkci DateSerial a TimeSerial je fakt, že kromě roku mohou být ostatní parametry mimo rozsah daný logikou časových a datumových údajů.

Díky tomu můžeme třebas jako měsíc zadat číslo 25. Funkce DateSerial se pak zachová tak, že k zadanému roku přičte zadaný počet měsíců.

Funkce DateSerial bez problémů pracuje s přestupnými roky. Při zadaní Dateserial(2000,2,29) obdržíme správně únorové datum, neboť rok 2000 je rokem přestupným.

Při zadaní Dateserial (2001,2,29) obdržíme správně březnové datum, neboť rok 2001 rokem přestupným není a systém ví, že únor 2001 má 28 dní a ne 29, jak se mu snažíme vnutit. Této vlastnosti můžeme použít ve funkci pro zjištování, zda-li je rok přestupný či nikoliv.

Příklad 1:

Function prestupny(rok)
   if day(dateserial(rok,2,29))=1 then
      prestupny=false
   else
      prestupny=true
   end if
end function

Pro úplnost uvedu ještě funkci, která testuje přestupný rok metodou, kterou jistě používá většina z vás.

Příklad 2:

Function prestupny1(rok)
   if (int(rok/4)=rok/4 and int(rok/100)<>rok/100) or int(rok/400)=rok/400 then
      prestupny1=true
   else
      prestupny1=false
   end if
end function

V příkladu číslo 3 jsou uvedeny volání funkcí z příkladu číslo 1 a 2. Test 1 je prováděn funkcí z příkladu číslo 1 a Test 2 je prováděn funkcí z příkladu číslo 2.

Příklad 3:

response.Write(„Test 1 přestupnosti roku 1996 „&prestupny(1996))
Response.Write („<br>“)
response.Write(„Test 1 přestupnosti roku 1997 „&prestupny(1997))
Response.Write („<br>“)
response.Write(„Test 1 přestupnosti roku 2000 „&prestupny(2000))
Response.Write („<br>“)
response.Write(„Test 1 přestupnosti roku 2001 „&prestupny(2001))
Response.Write („<br>“)
response.Write(„Test 2 přestupnosti roku 1996 „&prestupny1(1996))
Response.Write („<br>“)
response.Write(„Test 2 přestupnosti roku 1997 „&prestupny1(1997))
Response.Write („<br>“)
response.Write(„Test 2 přestupnosti roku 2000 „&prestupny1(2000))
Response.Write („<br>“)
response.Write(„Test 2 přestupnosti roku 2001 „&prestupny1(2001))
Response.Write („<br>“)

Funkce Cdate

Funkce Cdate převádí proměnnou na typ Date

vysledek=CDate(výraz)

V příkladu 4 si všimněte, že je zcela jedno, zda převádím na datum 13.12.1999 či 12.13.1999 nebo 1999.12.13. Funkce vždy rozpozná, že se jedná o jiný způsob zadání téhož data a to sice 13. prosince 1999.

Příklad 4:

response.Write(„Převod ‚366‘ na datum „&cdate(366))
Response.Write („<br>“)
response.Write(„Převod ‚12.12.1999‘ na datum „&cdate(„12.12.1999“))
Response.Write („<br>“)
response.Write(„Převod ‚12.12.1999 10:10:10‘ na datum „&cdate(„12.12.1999 10:10:10“))
Response.Write („<br>“)
response.Write(„Převod ‚13.12.1999‘ na datum „&cdate(„13.12.1999“))
Response.Write („<br>“)
response.Write(„Převod ‚12.13.1999‘ na datum „&cdate(„12.13.1999“))
Response.Write („<br>“)
response.Write(„Převod ‚1999.12.13‘ na datum „&cdate(„1999.12.13“))

TimeValue a DateValue

Funkce TimeValue přebírá jako parametr řetězec, který představuje čas a tento řetězec převádí na proměnnou typu Time.

vysledek=TimeValue(casovyretezec)

Funkce DateValue přebírá jako parametr řetězec, který představuje datum a tento řetězec převádí na proměnnou typu Date:

vysledek=DateValue(datumovyretezec)

Předávaný řetězec musí být, naprosto správný (tj.měsíc nesmí mít více dnů apod.). Jak byste dopadli při pokusu o převod řetězce 29 02 2001 13:51:16 na čas, vidíte v příkladu 5. Obdobný výsledek byste dostali při převodu na datum.

Příklad 5:

on error resume next
Response.Write („Pokus o převod řetězce 29 02 2001 13:51:16 na čas
„)
Response.Write (timevalue(„29 02 2001 13:51:16“))
Response.Write („Došlo k chybě číslo: „&err.number)
Response.Write („<br>“)
Response.Write („Důvodem chyby je: „&err.description)
Response.Write („<br>“)
on error goto 0

Funkce IsDate

Funkce IsDate zkontroluje, zda-li předávaný parametr je datum či čas nebo zda-li se dá na datum či čas převést. V kladném případě vrací True, v opačném případě False.

vysledek=IsDate(výraz)

V příkladu 6 vidíte testování různých řetězců na to, zda-li obsahují údaje typu date.

Příklad 6:

Response.Write („Je „&now&“ typu datum ? „&isdate(now))
Response.Write („<br>“)
Response.Write („Je 01.01.2000 typu datum ? „&isdate(„01.01.2000“))
Response.Write („<br>“)
Response.Write („Je 13.13.2000 typu datum ? „&isdate(„13.13.2000“))
Response.Write („<br>“)
Response.Write („Je 01.01 typu datum ? „&isdate(„01.01“))
Response.Write („<br>“)
Response.Write („Je 01.01. typu datum ? „&isdate(„01.01.“))
Response.Write („<br>“)
Response.Write („Je 0 typu datum ? „&isdate(„0“))
Response.Write („<br>“)
Response.Write („Je 0:0: typu datum ? „&isdate(„0:0:“))
Response.Write („<br>“)
Response.Write („Je 0:0 typu datum ? „&isdate(„0:0“))
Response.Write („<br>“)
Response.Write („Je 0:0:0 typu datum ? „&isdate(„0:0:0“))

Funkce FormatDateTime

Funkce FormatDateTime formátuje předaný datumový výraz podle druhého parametru

vysledek=formatdatetime(datumcas,typformatu)

Příklad 7:

Response.Write(„Dlouhé datum „&formatdatetime(now,vblongdate))
Response.Write („<br>“)
Response.Write(„Krátké datum „&formatdatetime(now,vbshortdate))
Response.Write („<br>“)
Response.Write(„Dlouhý čas „&formatdatetime(now,vblongtime))
Response.Write („<br>“)
Response.Write(„Krátký čas „&formatdatetime(now,vbshorttime))
Response.Write („<br>“)
Response.Write(„Generalní datum „&formatdatetime(now,vbgeneraldate))

Funkce Timer

Na závěr tohoto článku mám pro vás funkci, která vrací počet sekund od půlnoci s přesností na setinu sekundy. Ptáte se, k čemu je takováto funkce dobrá? Například můžete zjistit, jak dlouho trvalo provedení vašeho ASP. Jak na to, to si ukážeme v dalším příkladu. Nejdříve potřebujeme proměnnou, do které se bude ukládat čas startu timeru.

Dim StopWatch(20)

Protože při ladění programu potřebujeme většinou měřit časové úseky v různých částech kódu, definujeme si hned pole o velikosti 20. Můžeme tak měřit až 20 různých časových úseků.

Dále potřebujeme mechanismus, kterým si naše stopky pustíme.

sub StartTimer(x)
   StopWatch(x) = timer
end sub

Vytvoříme si dále proceduru, která jako parametr přijme pořadové číslo stopek a stopky pustí. Ve skutečnosti udělá to, že do příslušného prvku pole zapíše počet vteřin od půlnoci. Stopky nám už běží, ale ještě nemáme možnost, jak je zastavit. Proto si snadno vytvoříme funkci, která to dokáže.

function StopTimer(x)
   EndTime = Timer
   StopTimer = EndTime – StopWatch(x)
end function

Jak jsem již řekl, funkce vrací počet sekund od půlnoci. Co když, ale začneme měřit před půlnocí a skončíme s měřením po půlnoci. Tento nedostatek odstraníme tak, že doplníme funkci o test, která ověří, zda-li koncový čas není menší než počáteční a v kladném případě si přičteme ke konečnému času 86400 sekund, což je vlastně celý den.

function StopTimer(x)
   EndTime = Timer
   if EndTime < StopWatch(x) then
      EndTime = EndTime + (86400)
   end if
   StopTimer = EndTime – StopWatch(x)
end function

Stopky máme hotové a můžeme je začít používat. Spustíme je pomocí

starttimer(cislo stopek)

a zastavíme a zobrazíme pomocí

response.write(stoptimer(cislo stopek))

Nakonec ještě uvedu omezení těchto „stopek“- nelze změřit časové úseky kratší než 0.01 sekundy a delší jak 24 hodin.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *