Kirjoittaja: Antti Laaksonen (2002).
⚠ Huomio! Tämä opas on vanhentunut. Oppaan sisältöön ei voi enää luottaa. Opas on säilytetty vain sen historiallisen arvon vuoksi. ⚠
Visual Basicissa on päivämäärille oma sisäänrakennettu datatyyppi, Date. Päivämäärät voivat olla väliltä 1. tammikuuta 100 ja 31. joulukuuta 9999 - eli varsin riittävältä asteikolta. Date-tyyppiä käyttämällä mistä tahansa päivämäärästä saa vakiotietojen ohella mm. viikonpäivän, vuodenpäivän ja viikon numeron, joten valmiit funktiot riittävät varsin moneen tarkoitukseen.
Käytettävä kalenteri valitaan asettamalla Calendar-muuttujan arvoksi joko vbCalGreg (oletus) tai vbCalHijri. Oletusarvo vbCalGreg tarkoittaa meille tuttua gregoriaanista kalenteria, ja vbCalHijri ottaa käyttöön islamilaisen kalenterin. Kalenteri valitaan esimerkiksi näin:
Calendar = vbCalGreg
Päivämäärät ovat siis muuttujia Date-tyypillä. Muuttujille voi asettaa päivämäärän toisesta muuttujasta, merkkijonolla tai DateSerial- ja TimeSerial -funktioilla. Lisäksi erikoismuuttuja Now sisältää aina koneen nykyisen ajan.
Dim nyt As Date, joulu As Date, y2k As Date nyt = Now joulu = "24.12.2002" 'joulu = "24/12/02" y2k = DateSerial(2000, 1, 1)
Jos päivämäärän ilmoittaa merkkijonolla, sen voi huoletta ilmoittaa myös suomalaisessa muodossa pp.kk.vvvv, tietenkin perinteinen pp/kk/vv on myös mahdollinen tapa. DateSerial-funktio ottaa parametreikseen vuoden, kuukauden ja päivän.
Päivämäärissä on myös aina mukana kellonaika, minkä määrittäminen tapahtuu lisäämällä merkkijonoon aika tai käyttämällä TimeSerial-funktiota. DateSerial ja TimeSerial voidaan myös yhdistää. Now sisältää kellonajan automaattisesti.
Dim keskip As Date, keskiyo As Date, y2ka As Date keskip = "12:00:00" keskiyo = TimeSerial(0, 0, 0) y2ka = DateSerial(1999, 12, 31) + TimeSerial(23, 59, 59)
Funktiot DateValue ja TimeValue muodostavat myös päivämäärän merkkijonosta, mutta tavallisesti merkkijonon voi laittaa pelkkänäänkin Date-muuttujaan.
Format-funktio on paras tapa muotoilla Date-muuttujassa olevasta päivämäärästä halutunlainen. Funktion ensimmäinen parametri on päivämäärämuuttuja, jonka jälkeen tulee joku seuraavista muotoilumerkkijonoista tai niiden yhdistelmä. Taulukossa esimerkkipäivä on huhtikuun 5. vuonna 2002 ja kellonaika on 9:05:02. (*):llä merkityt kohdat riippuvat Windowsin maa-asetuksista, tässä taulukossa muoto on suomenkielinen.
muotoilu | palauttaa | esimerkki |
---|---|---|
c | täydellinen päivämäärä ja aika (*) | 5.4.2002 9:05:20 |
d | kuukauden päivän lyhyt muoto | 5 |
dd | kuukauden päivän pitkä muoto | 05 |
ddd | viikonpäivän lyhyt muoto (*) | pe |
dddd | viikonpäivän pitkä muoto (*) | perjantai |
ddddd | päivämäärän lyhyt muoto (*) | 5.4.2002 |
dddddd | päivämäärän pitkä muoto (*) | 5. huhtikuuta 2002 |
h | tunnin lyhyt muoto | 9 |
hh | tunnin pitkä muoto | 09 |
m | kuukauden lyhyt muoto | 4 |
mm | kuukauden pitkä muoto | 04 |
mmm | kuukauden nimen lyhyt muoto (*) | huhti |
mmmm | kuukauden nimen pitkä muoto (*) | huhtikuu |
n | minuutin lyhyt muoto | 5 |
nn | minuutin pitkä muoto | 05 |
q | vuosineljännes | 2 |
s | sekunnin lyhyt muoto | 2 |
ss | sekunnin pitkä muoto | 02 |
ttttt | täydellinen aika (*) | 9:05:02 |
w | viikonpäivän numero (*) | 5 |
ww | viikon numero | 14 |
y | vuodenpäivä | 95 |
yy | vuoden lyhyt muoto | 02 |
yyyy | vuoden pitkä muoto | 2002 |
Format-funktion kolmas valinnainen parametri on ensimmäisen viikonpäivän määritys, joka on usein hyvä laittaakin, sillä amerikassa sunnuntai on viikon ensimmäinen päivä maanantain sijaan. Parametri voi olla jokin seuraavista vakioista tai luvuista:
vakio | luku | ensimmäinen viikonpäivä |
---|---|---|
vbUseSystem | 0 | Windowsin maa-asetuksen mukainen |
vbSunday | 1 | sunnuntai (oletus) |
vbMonday | 2 | maanantai |
vbTuesday | 3 | tiistai |
vbWednesday | 4 | keskiviikko |
vbThursday | 5 | torstai |
vbFriday | 6 | perjantai |
vbSaturday | 7 | lauantai |
Neljäskin vapaaehtoinen parametri on olemassa, vuoden ensimmäisen viikon määrittäminen. Sen vaihtoehdot ovat:
vakio | luku | ensimmäinen viikko |
---|---|---|
vbUseSystem | 0 | Windowsin maa-asetuksen mukainen |
vbFirstJan1 | 1 | viikko, jona on tammikuun ensimmäinen päivä |
vbFirstFourDays | 2 | viikko, jossa on vähintään neljä uuden vuoden päivää |
vbFirstFullWeek | 3 | viikko, joka on kokonaan uuden vuoden puolella |
Näin ollen funktion täydellinen syntaksi on:
Format(aika, muotoilu [, viikon ensimmäinen päivä [, vuoden ensimmäinen viikko]])
Seuraava esimerkki näyttää MsgBoxissa tietoa sen hetkisestä päivämäärästä, kellonajasta, ja vuodenpäivästä.
Dim nyt As Date nyt = Now MsgBox "Nyt on " & Format(nyt, "dddd", vbMonday) & ", " & Format(nyt, "ddddd") & " ja kello on " & Format(nyt, "ttttt") & ". On vuoden " & Format(nyt, "y") & ". päivä."
Päivämäärän ja ajan osien palauttamiselle on myös omat funktionsa. Jokainen funktio ottaa parametrikseen päivämäärämuuttujan ja palauttaa kokonaisluvun. Funktiot ovat Year, Month, Day, Hour, Minute, Second ja Weekday ja ne palauttavat samassa järjestyksessä vuoden, kuukauden, päivä, tunnin, minuutin, sekunnin ja viikonpäivän numeron.
DatePart-funktio palauttaa lisäksi kokonaislukuna jonkin aikayksikön päivämäärämuuttujasta. Mahdollisia aikayksiköitä ovat:
merkki | yksikkö |
---|---|
d | päivä |
h | tunti |
m | kuukausi |
n | minuutti |
q | vuosineljännes |
s | sekunti |
y | vuodenpäivä |
yyyy | vuosi |
w | viikonpäivä |
ww | viikko |
Seuraavassa on pari esimerkkiä edellämainittujen funktioiden käytöstä:
Dim pvm As Date pvm = "20.03.2003 20:03" MsgBox "Vuosi: " & Year(pvm) MsgBox "Päivä: " & Day(pvm) MsgBox "Minuutti: " & Minute(pvm) MsgBox "Vuodenpäivä: " & DatePart("y", pvm)
VB sisältää edellämainittujen lisäksi ainakin kolme muuta päivämäärän liittyvää funktiota. Nämä funktiot ovat IsDate, DateAdd ja DateDiff.
IsDate-funktio palauttaa True, jos muuttuja on päivämääräksi kelpaava. Esimerkiksi:
If IsDate("29.11.2002") Then MsgBox "29.11.2002 on kelpaava aika" Else MsgBox "29.11.2002 ei ole kelpaava aika" End If '2002 ei ole karkausvuosi If IsDate("29.2.2002") Then MsgBox "29.2.2002 on kelpaava aika" Else MsgBox "29.2.2002 ei ole kelpaava aika" End If
DateAdd-funktio lisää päivämäärä muuttujaan tietyn verran aikayksikköjä edellisen luvun yksikkötaulukon mukaisesti. Esimerkki lisää päivämäärään 111 päivää:
Dim pvm As Date pvm = "1.1.2002" pvm = DateAdd("d", 111, pvm) MsgBox "111 päivää 1.1.2002 jälkeen on " & Format(pvm, "c")
DateDiff-funktio palauttaa kahden päivämäärän välisen eron halutussa yksikössä, edellisen luvun yksikkötaulukon mukaan. Esimerkki laskee päivien 1.1.1900 ja 1.1.2000 eron kuukausissa:
Dim p1 As Date, p2 As Date, p3 As Integer p1 = "1.1.1900" p2 = "1.1.2000" p3 = DateDiff("m", p1, p2) MsgBox "Päivämäärien ero: " & p3 & " kuukautta"
Oppaasta ei tullut järin pitkä, mutta yritin mahduttaa siihen mahdollisimman paljon asiaa. Joitakin VB:n päivämääräsysteemiin liittyviä asioita, kuten kolmea viimeistä funktiota, ei sen syvemmin käsitelty, mutta ongelmistahan voi aina kysyä keskustelualueella tai minulta sähköpostilla. Samaiseen sähköpostiosoitteeseen voi myös lähettää palautetta tästä oppaasta.
aika kätevää
onko sekunttien kymmenyksiin mitään vastaavaa?
hauki kirjoitti:
onko sekunttien kymmenyksiin mitään vastaavaa?
Katso timegettime API:
hyvä päivämäärien käsittely opas
Miten saa kun syöttää Esim. 24122009 niin järjestelmä asettaa sen 24.12.2009 muotoon?
Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.