Päivämäärä- ja aikatietojen tallennus, laskeminen ja vertailu Microsoft Accessissa

Huomautus

Office 365 ProPlus nimetään uudelleen Microsoft 365 Apps for enterprise -sovellukseksi. Lisätietoja tästä muutoksesta on tässä blogikirjoituksessa.

Yhteenveto

Tässä artikkelissa kuvataan, miten Microsoft Access tallentaa Päivämäärä ja kellonaika -tietotyypin. Tässä artikkelissa kerrotaan myös, miksi saatat saada odottamattomia tuloksia, kun lasket päivämääriä ja kellonaikoja tai vertailet päivämääriä ja kellonaikoja.

Tässä artikkelissa käsitellään seuraavia aiheita:

  • Päivämäärä- ja aikatietojen tallennus
  • Päivämäärä ja aika -kentän muotoileminen
  • Aikatietojen laskeminen
  • Päivämäärätietojen vertailu
  • Aikatietojen vertaaminen

Lisätietoja

Päivämäärä- ja aikatietojen tallennus

Access tallentaa Päivämäärä ja kellonaika -tietotyypin kaksoistarkkuna, liukulukuna, joka on enintään 15 desimaalia. Kaksoistarkkuusnumeron kokonaislukuosa vastaa päivämäärää. Desimaaliosa vastaa aikaa.

Kelvolliset päivämääräarvot ovat väliltä -657 434 (1. tammikuuta 100 A.D.) – 2 958 465 (31. joulukuuta 9999). Päivämäärän arvo 0 vastaa päivämäärää 30. joulukuuta 1899. Access tallentaa ennen 30. joulukuuta 1899 päivämäärät negatiivisiksi luvuiksi.

Kelvolliset aika-arvot ovat väliltä 0,0 (00:00:00) ja 0,99999 (23:59:59). Numeerinen arvo vastaa yhden päivän murto-osaa. Voit muuntaa numeerisen arvon tunnit, minuutit ja sekunnit kertomalla numeerisen arvon 24:llä.

Seuraavassa taulukossa on esitetty, miten Access tallentaa päivämäärä- ja aika-arvot:

Kaksinkertainen numero Päivämääräosa Todellinen päivämäärä Aikaosa Todellinen aika
1.0 1 31. joulukuuta 1899 .0 12.00.00
2.5 2 1. tammikuuta 1900 .5 24.00.00
27468.96875 27468 15. maaliskuuta 1975 .96875 23.15.00
36836.125 36836 6. marraskuuta 2000 .125 3.00.00

Jos haluat nähdä, miten Access tallentaa päivämäärä- ja aika-arvot lukuina, kirjoita seuraavat komennot Välittömässä ajassa -ikkunaan, paina ENTER-näppäintä ja huomaa sitten tulokset:

? CDbl(#5.18.1999 14:00:00#)

Tulos on yhtä suuri kuin: 36298,5833333333

? CDbl(#12.14.1849 17:32:00#)

Tulos on yhtä suuri kuin : -18278,7305555556

Jos haluat tarkastella numeeristen arvojen päivämäärää ja kellonaikaa, kirjoita seuraavat komennot Välitön-ikkunaan, paina ENTER-näppäintä ja huomaa sitten tulokset:

? CVDate(1,375)

Tulos on yhtä suuri kuin: 31.12.1899 9.00:00

? CVDate(-304398.575)

Tulos on yhtä suuri kuin: 1.8.1066 13:48:00

Päivämäärä ja aika -kentän muotoileminen

Voit muotoilla Päivämäärä ja aika -arvon niin, että se näyttää päivämäärän, ajan tai molemmat. Kun käytät vain päivämäärä -muotoa, Access tallentaa aikaosalle arvon 0. Kun käytät vain aikaa -muotoa, Access tallentaa päivämääräosalle arvon 0.

Seuraavassa taulukossa on esitetty, miten Access tallentaa päivämäärä- ja aika-arvot. Seuraavassa taulukossa on myös esitetty, miten voit näyttää nämä arvot eri muodoissa:

Tallennettu arvo (kaksinkertainen luku) Oletusmuoto (Yleinen päivämäärä) Mukautettu muoto (kk/pp/vvvv hh:nn:ss A.M./P.M.)
36295.0 5/15/99 15.5.1999 12.00.00
0.546527777777778 13.07 30.12.1899 13:07:00
36232.9375 3/13/99 10.30 13.03.1999 22:30:00

Huomautus Päivämäärä ja kellonaika -arvon oletusmuoto on Yleinen päivämäärä. Jos arvo on vain päivämäärä, kellonaikaa ei ole näkyvissä. Jos arvo on vain aika, päivämäärää ei ole näkyvissä.

Aikatietojen laskeminen

Koska aika-arvo tallennetaan murto-osasta 24 tunnin päivää, saatat saada vääriä muotoilutuloksia, kun lasket ajanjaksoja, jotka ovat suurempia kuin 24 tuntia. Voit kiertää tämän ongelman luomalla käyttäjän määrittämän funktion, joka varmistaa, että aikavälit on muotoiltu oikein.

Microsoft esittää ohjelmointiesimerkkejä vain asian havainnollistamiseksi, ilman suoraa tai epäsuoraa vastuuta niiden toimivuudesta. Tämä sisältää muunmuassa epäsuorat vastuut soveltuvuudesta kaupankäyntiin tai soveltuvuuteen yksilöityyn käyttöön. Tässä artikkelissa oletetaan, että olet perehtynyt käytettyyn ohjelmointikieleen, sekä proseduurien luonti- ja virheenkorjaustyökaluihin. Microsoftin tukihenkilöt voivat auttaa selvittämään tietyn proseduurin toiminnallisuutta, mutta he eivät muokkaa näitä esimerkkejä parantamaan yksittäisen tarpeen toiminnallisuutta eivätkä luo siihen proseduureja. Voit laskea ja muotoilla aikavälit oikein seuraavasti:

  1. Luo moduuli ja kirjoita seuraava rivi Määrityksiä-osaan, jos seuraava rivi ei ole vielä siellä:

    Eksplisiittinen asetus

  2. Kirjoita seuraava toimintosarja:

    '------------------------------------------------------------------
    '  This function calculates the elapsed time between two values and then
    '  formats the result in four different ways.
    '
    '  The function accepts interval arguments such as the following:
    '
    '     #5/12/95 6:00:00AM# - #5/11/95 10:00:00PM#
    '
    '
    '
    '     [End Time]-[Start Time]
    '------------------------------------------------------------------
    
    Function ElapsedTime (Interval)
      Dim x
      x = Int(CSng(Interval * 24 * 3600)) & " Seconds"
      Debug.Print x
      x = Int(CSng(Interval * 24 * 60)) & ":" & Format(Interval, "ss") _
         & " Minutes:Seconds"
      Debug.Print x
      x = Int(CSng(Interval * 24)) & ":" & Format(Interval, "nn:ss") _
         & " Hours:Minutes:Seconds"
      Debug.Print x
      x = Int(CSng(Interval)) & " days " & Format(Interval, "hh") _
         & " Hours " & Format(Interval, "nn") & " Minutes " & _
         Format(Interval, "ss") & " Seconds"
      Debug.Print x
    
    End Function
    
  3. Kirjoita seuraava rivi Välitön-ikkunaan ja paina sitten ENTER-näppäintä:

    ? Kuluneen ajan(#6.1.1999 8:23:00PM#-#6/1/1999 8:12:12AM#)

Huomaa, että seuraavat arvot ovat näkyvissä:

43848 Seconds
730:48 Minutes:Seconds
12:10:48 Hours:Minutes:Seconds
0 days 12 Hours 10 Minutes 48 Seconds

Päivämäärätietojen vertailu

Koska päivämäärät ja ajat tallennetaan yhteen kaksoistarkkuuslukuina, saatat saada odottamattomia tuloksia, kun vertaat päivämäärä- ja aikatietoja. Jos esimerkiksi kirjoitat seuraavan lausekkeen Välitön-ikkunaan, saat Epätosi-tuloksen, vaikka tämän päivän päivämäärä olisi 31.3.1999:

? Now()=DateValue("31.3.1999")

Now()-funktio palauttaa kaksoistarkkuusnumeron, joka vastaa nykyistä päivämäärää ja nykyistä kellonaikaa. DateValue()-funktio palauttaa kuitenkin kokonaisluvun, joka edustaa päivämäärää, mutta ei murtolukujen aika-arvoa. Siksi Now() on yhtä kuin DateValue() vain, kun Now() palauttaa ajan 00:00:00 (12:00:00 A.M.).

Saat tarkat tulokset, kun vertaat päivämääräarvoja, käyttämällä yhtä seuraavista funktioista. Jos haluat testata kunkin funktion, kirjoita funktio Välittömään ajankohtaan, korvaa nykyinen päivämäärä päivämäärällä 31.3.1999 ja paina sitten ENTER-näppäintä:

  • Jos haluat palauttaa kokonaislukuarvon, käytä Date()-funktiota:

    ? Date()=DateValue("31.3.1999")

  • Jos haluat poistaa Now()-funktion murto-osan, käytä Int()-funktiota:

    ? Int(Now())=DateValue("31.3.1999")

Aikatietojen vertaaminen

Kun vertaat aika-arvoja, saatat saada epäyhdenmukaisia tuloksia, koska aika-arvo tallennetaan kaksoistarkkuus-, liukuluku-, murtolukuosana. Jos esimerkiksi kirjoitat seuraavan lausekkeen Välitön-ikkunaan, saat epätosi (0) -tuloksen, vaikka kaksi aika-arvoa näyttävät samolta:

var1 = #2:01:00 PM #

var2 = DateAdd("n", 10, var1)

? var2 = #2:11:00 #

Kun Access muuntaa aika-arvon murtoluvuksi, laskettu tulos ei ehkä ole sama kuin aika-arvo. Laskutoimituksesta johtuva pieni ero riittää tuottamaan epätosi (0) tuloksen, kun tallennettua arvoa verrataan vakioarvoon.

Jos haluat tarkkoja tuloksia, kun vertaat aika-arvoja, käytä yhtä seuraavista tavoista. Voit testata kunkin menetelmän kirjoittamalla kunkin menetelmän Välittömät menetelmät -ikkunaan ja painamalla sitten ENTER-näppäintä:

Lisää liittyvä päivämäärä aikavertailuun:

var1 = #1.1.99 14:01:00 #

var2 = DateAdd("n", 10, var1)

? var2 = #1.1.99 2:11:00 #

Muunna aika-arvot merkkijonon tietotyypeiksi ennen niiden vertailua:

var1 = #2:01:00 PM #

var2 = DateAdd("n", 10, var1)

? CStr(var2) = CStr(#2:11:00 PM#)

DateDiff()-funktiolla voit verrata tarkkoja yksiköitä, kuten sekunteja:

var1 = #2:01:00 PM #

var2 = DateAdd("n", 10, var1)

? DateDiff("s"; var2; #2:11:00#) = 0

Lisätietoja

Lisätietoja päivämääräarvojen ja aika-arvojen laskemisesta on kohdassa DateSerial-funktio

Saat lisätietoja Päivämäärä ja kellonaika -tietotyyppien muotoilemista varten valitsemalla Microsoft Accessin ohjeen Ohje-valikosta, kirjoittamalla Muoto-ominaisuuden – päivämäärä ja aika -tietotyypin Office-avustajaan tai ohjattuun vastaustoimintoon ja valitsemalla sitten Hae, jolloin ohjeaihe tulee näkyviin.