Datum/tijd-gegevens opslaan, berekenen en vergelijken in Microsoft Access

Samenvatting

In dit artikel wordt beschreven hoe Microsoft Access het gegevenstype Datum/tijd opslaat. In dit artikel wordt ook beschreven waarom u onverwachte resultaten kunt ontvangen wanneer u datums en tijden berekent of datums en tijden vergelijkt.

In dit artikel worden de volgende onderwerpen beschreven:

  • Datum/tijd-gegevens opslaan
  • Een datum/tijd-veld opmaken
  • Tijdgegevens berekenen
  • Datumgegevens vergelijken
  • Tijdgegevens vergelijken

Meer informatie

Datum/tijd-gegevens opslaan

In Access wordt het gegevenstype Datum/tijd opgeslagen als een drijvende komma met dubbele precisie tot 15 decimalen. Het gehele getal van het dubbele precisiegetal vertegenwoordigt de datum. Het decimaal gedeelte vertegenwoordigt de tijd.

Geldige datumwaarden variëren van -657.434 (1 januari 100 na Chr.) tot 2.958.465 (31 december 9999 na Chr.). Een datumwaarde van 0 vertegenwoordigt 30 december 1899. Access slaat datums vóór 30 december 1899 op als negatieve getallen.

Geldige tijdwaarden variëren van .0 (00:00:00) tot .99999 (23:59:59). De numerieke waarde vertegenwoordigt een fractie van één dag. U kunt de numerieke waarde converteren naar uren, minuten en seconden door de numerieke waarde met 24 te vermenigvuldigen.

In de volgende tabel ziet u hoe datum/tijd-waarden worden opgeslagen in Access:

Dubbel getal Datumgedeelte Werkelijke datum Tijdgedeelte Werkelijke tijd
1.0 1 31 december 1899 .0 12:00:00 uur
2.5 2 1 januari 1900 .5 12:00:00 uur
27468.96875 27468 15 maart 1975 .96875 23:15:00 uur
36836.125 36836 dinsdag 6 november 2000 .125 3:00:00 uur

Als u wilt zien hoe datum-/tijdwaarden worden opgeslagen als getallen, typt u de volgende opdrachten in het venster Direct, drukt u op Enter en ziet u de resultaten:

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

Resultaat is gelijk aan: 36298,58333333333

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

Resultaat is gelijk aan: -18278,7305555556

Als u de datum en tijd van numerieke waarden wilt weergeven, typt u de volgende opdrachten in het venster Direct, drukt u op Enter en ziet u de resultaten:

? CVDate(1.375)

Resultaat is gelijk aan: 31-12-1899 9:00:00 AM

? CVDate(-304398.575)

Resultaat is gelijk aan: 1-8-1066 13:48:00

Een datum/tijd-veld opmaken

U kunt een datum/tijd-waarde opmaken om een datum, een tijd of beide weer te geven. Wanneer u een alleen-datumnotatie gebruikt, wordt de waarde 0 voor het tijdgedeelte opgeslagen. Wanneer u een alleen-tijdnotatie gebruikt, wordt in Access de waarde 0 opgeslagen voor het datumgedeelte.

In de volgende tabel ziet u hoe datum-/tijdwaarden worden opgeslagen in Access. In de volgende tabel ziet u ook hoe u deze waarden kunt weergeven met verschillende indelingen:

Opgeslagen waarde (dubbel getal) Standaardindeling (algemene datum) Aangepaste indeling (mm/dd/jjjj uu:nn:ss A.M./P.M.)
36295.0 5/15/99 15-05-1999 0:00:00
0.546527777777778 13:07 30-12-1899 01:07:00 PM
36232.9375 3/13/99 22:30 13-03-1999 22:30:00 uur

Opmerking De standaardnotatie voor een datum/tijd-waarde is Algemene datum. Als een waarde alleen-datum is, wordt er geen tijd weergegeven. Als de waarde alleen-tijd is, wordt er geen datum weergegeven.

Tijdgegevens berekenen

Omdat een tijdwaarde wordt opgeslagen als een fractie van een 24-uursdag, kunt u onjuiste opmaakresultaten krijgen wanneer u tijdsintervallen van meer dan 24 uur berekent. Als u dit gedrag wilt omzeilen, kunt u een door de gebruiker gedefinieerde functie maken om ervoor te zorgen dat tijdsintervallen correct worden opgemaakt.

Microsoft verstrekt programmeervoorbeelden alleen ter illustratie, zonder expliciete of impliciete garantie. daaronder mede begrepen, maar niet beperkt tot impliciete garanties met betrekking tot de verkoopbaarheid en/of geschiktheid voor een bepaald doel. In dit artikel wordt ervan uitgegaan dat u bekend bent met de programmeertaal VBScript, alsmede met de hulpprogramma's waarmee procedures worden gemaakt en waarmee fouten in procedures worden opgespoord. U kunt desgewenst contact opnemen met Microsoft Product Support Services voor uitleg over de functie van een bepaalde procedure. Microsoft Product Support Services is echter niet bereid de voorbeelden aan te passen om extra functies toe te voegen of om procedures te maken die aan uw specifieke eisen voldoen. Voer de volgende stappen uit om tijdsintervallen correct te berekenen en op te maken:

  1. Maak een module en typ de volgende regel in de sectie Declaraties als de volgende regel er nog niet is:

    Optie expliciet

  2. Typ de volgende procedure:

    '------------------------------------------------------------------
    '  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. Typ de volgende regel in het venster Direct en druk op Enter:

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

U ziet dat de volgende waarden worden weergegeven:

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

Datumgegevens vergelijken

Omdat datums en tijden samen worden opgeslagen als getallen met dubbele precisie, kunt u onverwachte resultaten ontvangen wanneer u datum/tijd-gegevens vergelijkt. Als u bijvoorbeeld de volgende expressie typt in het venster Direct, ontvangt u een onwaar resultaat, zelfs als de datum van vandaag 31-3-1999 is:

? Now()=DateValue("31-1999")

De functie Now() retourneert een dubbele precisie die de huidige datum en de huidige tijd aangeeft. De functie DateValue() retourneert echter een geheel getal dat de datum aangeeft, maar geen fractionele tijdwaarde. Daarom is Now() alleen gelijk aan DateValue() wanneer Now() een tijd van 00:00:00 (12:00:00 A.M.) retourneert.

Als u nauwkeurige resultaten wilt ontvangen wanneer u datumwaarden vergelijkt, gebruikt u een van de volgende functies. Als u elke functie wilt testen, typt u de functie in het venster Direct, vervangt u de huidige datum door 31-3-1999 en drukt u op Enter:

  • Als u een geheel getal wilt retourneren, gebruikt u de functie Date():

    ? Date()=DateValue("31-3-1999")

  • Als u het fractionele deel van de functie Now() wilt verwijderen, gebruikt u de functie Int():

    ? Int(Now())=DateValue("31/3/1999")

Tijdgegevens vergelijken

Wanneer u tijdwaarden vergelijkt, ontvangt u mogelijk inconsistente resultaten omdat een tijdwaarde wordt opgeslagen als het breukgedeelte van een drijvendekommanummer met dubbele precisie. Als u bijvoorbeeld de volgende expressie typt in het venster Direct, ontvangt u een onwaar (0) resultaat, ook al zien de twee tijdwaarden er hetzelfde uit:

var1 = #14:01:00#

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

? var2 = #14:23:00#

Wanneer een tijdwaarde wordt geconverteerd naar een breuk, is het berekende resultaat mogelijk niet identiek aan de tijdwaarde. Het kleine verschil dat door de berekening wordt veroorzaakt, is voldoende om een onwaar (0) resultaat te produceren wanneer u een opgeslagen waarde vergelijkt met een constante waarde.

Als u nauwkeurige resultaten wilt ontvangen wanneer u tijdwaarden vergelijkt, gebruikt u een van de volgende methoden. Als u elke methode wilt testen, typt u elke methode in het venster Direct en drukt u op Enter:

Voeg een gekoppelde datum toe aan de tijdvergelijking:

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

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

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

Converteer de tijdwaarden naar tekenreeksgegevenstypen voordat u ze vergelijkt:

var1 = #14:01:00#

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

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

Gebruik de functie DateDiff() om nauwkeurige eenheden te vergelijken, zoals seconden:

var1 = #14:01:00#

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

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

Verwijzingen

Zie DateSerial Function voor meer informatie over het berekenen van datumwaarden en tijdwaarden

Voor meer informatie over het opmaken van datum-/tijdgegevenstypen klikt u op Help van Microsoft Access in het menu Help , typt u notatieeigenschap - datum/tijd gegevenstype in de Office-assistent of de wizard Antwoord en klikt u vervolgens op Zoeken om het onderwerp weer te geven.