Dátum/idő adatok tárolása, kiszámítása és összehasonlítása a Microsoft Accessben

Összefoglalás

Ez a cikk azt ismerteti, hogy a Microsoft Access hogyan tárolja a dátum/idő adattípust. Ez a cikk azt is ismerteti, hogy miért kaphat váratlan eredményeket a dátumok és időpontok kiszámításakor vagy a dátumok és időpontok összehasonlításakor.

Ez a cikk a következő témaköröket ismerteti:

  • Dátum-/időadatok tárolása
  • Dátum/idő mező formázása
  • Időadatok kiszámítása
  • Dátumadatok összehasonlítása
  • Időadatok összehasonlítása

További információ

Dátum-/időadatok tárolása

Az Access a Dátum/idő adattípust dupla pontosságú lebegőpontos számként tárolja, legfeljebb 15 tizedesjegyig. A dupla pontosságú szám egész része a dátumot jelöli. A tizedes tört az időt jelöli.

Az érvényes dátumértékek -657 434 (i. e. 100. január 1.) és 2 958 465 (9999. december 31.) között mozognak. A 0 dátumérték 1899. december 30. Az Access az 1899. december 30. előtti dátumokat negatív számként tárolja.

Az érvényes időértékek 0,0 (00:00:00) és .999999 (23:59:59) között mozognak. A numerikus érték egy nap törtrészét jelöli. A numerikus értéket órákká, percekké és másodpercekké alakíthatja a numerikus érték 24-gyel való szorzásával.

Az alábbi táblázat bemutatja, hogyan tárolja az Access a dátum/idő értékeket:

Dupla szám Dátum rész Tényleges dátum Idő rész Tényleges idő
1.0 1 1899. december 31. .0 12:00:00
2.5 2 1900. január 1. .5 12:00:00 du.
27468.96875 27468 1975. március 15. .96875 11:15:00 du.
36836.125 36836 2000. november 6. .125 03:00:00

Ha meg szeretné tekinteni, hogy az Access hogyan tárolja számként a dátum/idő értékeket, írja be a következő parancsokat az Azonnali ablakba, nyomja le az ENTER billentyűt, és figyelje meg az eredményeket:

? CDbl(#5/18/1999 14:00:00#)

Az eredmény egyenlő: 36298.5833333333

? CDbl(#12/14/1849 17:32:00#)

Az eredmény egyenlő: -18278.730555556

A numerikus értékek dátumának és időpontjának megtekintéséhez írja be a következő parancsokat az Azonnali ablakba, nyomja le az ENTER billentyűt, és figyelje meg az eredményeket:

? CVDate(1.375)

Az eredmény egyenlő: 1899. 12. 31. 9:00:00

? CVDate(-304398.575)

Az eredmény egyenlő: 1066.08.01. 13:48:00

Dátum/idő mező formázása

Dátum/idő érték formázásával megjelenítheti a dátumot, az időpontot vagy mindkettőt. Ha csak dátumformátumot használ, az Access 0 értéket tárol az idő részhez. Ha csak időformátumot használ, az Access 0 értéket tárol a dátum részhez.

Az alábbi táblázat bemutatja, hogyan tárolja az Access a dátum/idő értékeket. Az alábbi táblázat azt is bemutatja, hogyan jelenítheti meg ezeket az értékeket különböző formátumok használatával:

Tárolt érték (dupla szám) Alapértelmezett formátum (általános dátum) Egyéni formátum (pp/dd/éé óó:nn:ss A.M./P.M.)
36295.0 5/15/99 1999. 05. 15. 12:00:00
0.546527777777778 13:07 1899. 12. 30. 13:07:00
36232.9375 3/13/99 10:30 1999. 03. 13. 10:30:00

Megjegyzés A Dátum/idő érték alapértelmezett formátuma az Általános dátum. Ha egy érték csak dátummal rendelkezik, nem jelenik meg idő. Ha az érték csak időalapú, nem jelenik meg dátum.

Időadatok kiszámítása

Mivel egy időérték egy 24 órás nap törtrészeként van tárolva, előfordulhat, hogy helytelen formázási eredményeket kap, amikor 24 óránál hosszabb időintervallumokat számít ki. A viselkedés megkerüléséhez létrehozhat egy felhasználó által definiált függvényt, amellyel meggyőződhet arról, hogy az időintervallumok megfelelően vannak formázva.

A Microsoft csak szemléltetési célból ad közre programozási példákat, és azokra sem közvetlen, sem közvetett jótállást nem vállal. Ebbe beleértendő a forgalomba hozhatóságra és az adott célra való megfelelőségre vonatkozó jótállás is. A cikk feltételezi, hogy az olvasó jártas a szemléltetésre szolgáló programozási nyelvben, valamint az eljárások létrehozására és a velük kapcsolatos hibakeresésre szolgáló eszközök használatában. A Microsoft támogatási szakemberei segítséget nyújthatnak egy-egy adott eljárás funkcionalitásának megértésében, de funkcionalitásbővítési célból nem módosítják a példákat, és nem készítenek az egyéni igényeknek megfelelő eljárásokat. Az időintervallumok helyes kiszámításához és formázásához kövesse az alábbi lépéseket:

  1. Hozzon létre egy modult, majd írja be a következő sort a Deklarációk szakaszba, ha a következő sor még nincs ott:

    Explicit beállítás

  2. Írja be a következő eljárást:

    '------------------------------------------------------------------
    '  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. Írja be a következő sort az Azonnali ablakba, majd nyomja le az ENTER billentyűt:

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

Figyelje meg, hogy a következő értékek jelennek meg:

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

Dátumadatok összehasonlítása

Mivel a dátumok és időpontok dupla pontosságú számokként vannak tárolva, váratlan eredményeket kaphat a dátum/idő adatok összehasonlításakor. Ha például a következő kifejezést írja be az Azonnali ablakba, Akkor is Hamis eredményt kap, ha a mai dátum 1999. 03. 31.

? Now()=DateValue("1999. 03. 31.")

A Now() függvény egy dupla pontosságú számot ad vissza, amely az aktuális dátumot és az aktuális időt jelöli. A DateValue() függvény azonban egy egész számot ad vissza, amely a dátumot jelöli, de a törtidő értékét nem. Ezért a Now() csak akkor egyenlő a DateValue() értékkel, ha a Now() 00:00:00 (reggel 12:00:00) időpontot ad vissza.

Ha pontos eredményeket szeretne kapni a dátumértékek összehasonlításakor, használja az alábbi függvények egyikét. Az egyes függvények teszteléséhez írja be a függvényt az Azonnali ablakba, helyettesítse be az aktuális dátumot 1999. 03. 31. dátummal, majd nyomja le az ENTER billentyűt:

  • Egész érték visszaadásához használja a Date() függvényt:

    ? Date()=DateValue("1999. 03. 31.")

  • A Now() függvény törtrészének eltávolításához használja az Int() függvényt:

    ? Int(Now())=DateValue("1999. 03. 31.")

Időadatok összehasonlítása

Az időértékek összehasonlítása során inkonzisztens eredményeket kaphat, mivel az időértékek a dupla pontosságú lebegőpontos szám törtrészeként lesznek tárolva. Ha például a következő kifejezést írja be az Azonnali ablakba, akkor hamis (0) eredményt kap annak ellenére, hogy a két időérték azonos:

var1 = #2:01:00 PM#

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

? var2 = #2:11:00 PM#

Ha az Access egy időértéket törtté alakít át, előfordulhat, hogy a számított eredmény nem azonos az időértékel. A számítás által okozott kis különbség elegendő hamis (0) eredmény létrehozásához, ha egy tárolt értéket egy állandó értékkel hasonlít össze.

Ha pontos eredményeket szeretne kapni az időértékek összehasonlítása során, használja az alábbi módszerek egyikét. Az egyes metódusok teszteléséhez írja be az egyes metódusokat az Azonnali ablakba, majd nyomja le az ENTER billentyűt:

Adjon hozzá egy társított dátumot az idő összehasonlításához:

var1 = #1/1/99 2:01:00 PM#

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

? var2 = #1/1/99 2:11:00 PM#

Az időértékeket sztring adattípusokká alakíthatja, mielőtt összehasonlítja őket:

var1 = #2:01:00 PM#

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

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

A DateDiff() függvénnyel összehasonlíthatja a pontos egységeket, például a másodperceket:

var1 = #2:01:00 PM#

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

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

Hivatkozások

A dátumértékek és az időértékek kiszámításával kapcsolatos további információkért lásd: DateSerial függvény

A Dátum/idő adattípusok formázásával kapcsolatos további információkért kattintson a Microsoft Access súgójára a Súgó menüben, írja be a format tulajdonságot – dátum/idő adattípust az Office Segédben vagy a Válasz varázslóban, majd kattintson a Keresés gombra a témakör megtekintéséhez.