Jak ukládat, počítat a porovnávat data data a času v Microsoft Accessu

Souhrn

Tento článek popisuje, jak Microsoft Access ukládá datový typ Datum a čas. Tento článek také popisuje, proč se při výpočtu kalendářních dat a časů nebo při porovnávání dat a časů můžou zobrazit neočekávané výsledky.

Tento článek popisuje následující témata:

  • Uložení dat data a času
  • Formátování pole data a času
  • Výpočet časových dat
  • Porovnání dat kalendářních dat
  • Porovnání časových dat

Další informace

Uložení dat data a času

Access ukládá datový typ Datum a čas jako číslo s dvojitou přesností s plovoucí desetinnou čárkou až 15 desetinných míst. Celočíselná část čísla s dvojitou přesností představuje datum. Desetinná část představuje čas.

Platné hodnoty kalendářních dat jsou v rozsahu od -657 434 (1. ledna 100) do 2 958 465 (31. prosince 9999). Hodnota data 0 představuje 30. prosince 1899. Access ukládá data před 30. prosincem 1899 jako záporná čísla.

Platné časové hodnoty jsou v rozsahu od 0,0 (00:00:00) do 0,99999 (23:59:59). Číselná hodnota představuje zlomek jednoho dne. Číselnou hodnotu můžete převést na hodiny, minuty a sekundy vynásobením číselné hodnoty číslem 24.

Následující tabulka ukazuje, jak Access ukládá hodnoty data a času:

Dvojité číslo Část s datem Skutečné datum Časová část Skutečný čas
1.0 1 úterý 31. prosince 1899 .0 12:00:00
2.5 2 úterý 1. ledna 1900 .5 12:00:00
27468.96875 27468 úterý 15. března 1975 .96875 11:15:00
36836.125 36836 úterý 6. listopadu 2000 .125 3:00:00

Pokud chcete zobrazit, jak Access ukládá hodnoty data a času jako čísla, zadejte do okna Immediate následující příkazy, stiskněte klávesu ENTER a všimněte si výsledků:

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

Výsledek se rovná: 36298,58333333333

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

Výsledek se rovná: -18278,7305555556

Pokud chcete zobrazit datum a čas číselných hodnot, zadejte do okna Immediate následující příkazy, stiskněte klávesu ENTER a pak si všimněte výsledků:

? CVDate(1.375)

Výsledek se rovná: 31.12.1899 9:00:00

? CVDate(-304398.575)

Výsledek se rovná: 1.8.1066 13:48:00

Formátování pole data a času

Hodnotu data a času můžete naformátovat tak, aby zobrazovala datum, čas nebo obojí. Pokud použijete formát jen pro datum, Access pro časovou část uloží hodnotu 0. Pokud použijete formát pouze časového limitu, access uloží hodnotu 0 pro část s datem.

Následující tabulka ukazuje, jak Access ukládá hodnoty data a času. Následující tabulka také ukazuje, jak můžete tyto hodnoty zobrazit v různých formátech:

Uložená hodnota (dvojité číslo) Výchozí formát (obecné datum) Vlastní formát (mm/dd/rrrr hh:nn:ss A.M./P.M.)
36295.0 5/15/99 15.05.1999 0:00:00
0.546527777777778 13:07 30.12.1899 13:07:00
36232.9375 3/13/99 22:30 13.3.1999 22:30:00

Poznámka Výchozí formát pro hodnotu Datum a čas je Obecné datum. Pokud je hodnota pouze pro datum, nezobrazí se žádný čas. Pokud je hodnota pouze časového limitu, nezobrazí se žádné datum.

Výpočet časových dat

Vzhledem k tomu, že se časová hodnota ukládá jako zlomek 24hodinového dne, můžou se při výpočtu časových intervalů delších než 24 hodin zobrazit nesprávné výsledky formátování. Chcete-li toto chování obejít, můžete vytvořit uživatelem definovanou funkci, která zajistí správné formátování časových intervalů.

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci, bez žádné záruky výslovně uvedené nebo odvozené, včetně, bez omezení, odvozených záruk vztahujících se k obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že uživatel je obeznámen s programovacím jazykem, který je předmětem ukázky, a s nástroji použitými pro vytvoření a ladění skriptu. Pracovníci technické podpory společnosti Microsoft mohou vysvětlit funkce určitého postupu, nemohou však následující příklady rozšířit o další funkce nebo konstrukce podle konkrétních požadavků uživatele. Pokud chcete správně vypočítat a formátovat časové intervaly, postupujte takto:

  1. Vytvořte modul a zadejte následující řádek do oddílu Deklarace, pokud tam ještě není následující řádek:

    Explicitní možnost

  2. Zadejte následující postup:

    '------------------------------------------------------------------
    '  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. Do okna Immediate zadejte následující řádek a stiskněte klávesu ENTER:

    ? ElapsedTime(#1.6.1999 8:23:00PM#-#1.6.1999 8:12:12AM#)

Všimněte si, že se zobrazí následující hodnoty:

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

Porovnání dat kalendářních dat

Vzhledem k tomu, že se data a časy ukládají společně jako čísla s dvojitou přesností, můžou se při porovnání dat data a času zobrazit neočekávané výsledky. Pokud například v okně Immediate zadáte následující výraz, zobrazí se výsledek False, i když je dnešní datum 31. 3. 1999:

? Now()=DateValue("31.3.1999")

Funkce Now() vrátí číslo s dvojitou přesností, které představuje aktuální datum a aktuální čas. Funkce DateValue() ale vrátí celé číslo, které představuje datum, ale ne zlomkovou časovou hodnotu. Funkce Now() se proto rovná hodnotě DateValue() pouze tehdy, když funkce Now() vrátí čas 00:00:00 (12:00:00 A.M.).

Pokud chcete získat přesné výsledky při porovnávání hodnot kalendářních dat, použijte jednu z následujících funkcí. Pokud chcete otestovat každou funkci, zadejte ji do okna Immediate, nahraďte aktuálním datem 31.3.1999 a stiskněte enter:

  • Pokud chcete vrátit celočíselnou hodnotu, použijte funkci Date():

    ? Date()=DateValue("31.3.1999")

  • Pokud chcete odebrat zlomkovou část funkce Now(), použijte funkci Int():

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

Porovnání časových dat

Při porovnávání časových hodnot se můžou zobrazit nekonzistentní výsledky, protože časová hodnota je uložena jako zlomková část čísla s dvojitou přesností s plovoucí desetinnou čárkou. Pokud například v okně Immediate zadáte následující výraz, zobrazí se výsledek false (0), i když obě časové hodnoty vypadají stejně:

var1 = #14:01:00#

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

? var2 = #14:11:00#

Když Access převede časovou hodnotu na zlomek, vypočítaný výsledek nemusí být identický s časovou hodnotou. Malý rozdíl způsobený výpočtem stačí k vytvoření výsledku false (0) při porovnání uložené hodnoty s konstantní hodnotou.

Pokud chcete získat přesné výsledky při porovnávání časových hodnot, použijte jednu z následujících metod. Pokud chcete otestovat každou metodu, zadejte každou metodu v okně Immediate a stiskněte klávesu ENTER:

Přidejte do porovnání času přidružené datum:

var1 = #1/1/99 14:01:00#

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

? var2 = #1/1/99 14:11:00#

Před jejich porovnáním převeďte časové hodnoty na datové typy řetězců:

var1 = #14:01:00#

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

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

Pomocí funkce DateDiff() můžete porovnat přesné jednotky, jako jsou sekundy:

var1 = #14:01:00#

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

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

Odkazy

Další informace o výpočtu hodnot kalendářních dat a časových hodnot najdete v tématu Funkce DateSerial.

Další informace o formátování datových typů data a času získáte kliknutím na příkaz Nápověda aplikace Microsoft Access v nabídce Nápověda , v Pomocníkovi Office nebo v Průvodci odpověďmi zadejte vlastnost formát – datový typ data a času a potom kliknutím na tlačítko Hledat zobrazte téma.