Hvis en Microsoft Access 97-versjon av denne artikkelen, kan du se
130514.

Moderat: Krever grunnleggende makroer, koding og interoperabilitet ferdigheter.

Sammendrag

Denne artikkelen beskriver hvordan Microsoft Access lagrer dato-/ klokkeslettdata, skriver inn. Denne artikkelen beskriver også hvorfor du kan få uventede resultater når du beregner datoer og klokkeslett, eller sammenligne datoene og klokkeslettene.

Denne artikkelen beskriver følgende emner:

  • Lagre dato/klokkeslett-data

  • Formatere et dato/klokkeslett-felt

  • Beregne tidsdata

  • Sammenligne datodata

  • Sammenligne tidsdata

Hvis du vil ha mer informasjon

Lagre dato/klokkeslett-data

Access lagrer dato/klokkeslett-datatype som en langt flyttall-nøyaktighet, flyttall tall opptil 15 desimaler. Heltallsdelen av tall med dobbel presisjon representerer datoen. Desimaldelen representerer klokkeslettet.

Gyldige datoverdier strekker seg fra-657 434 (januar 1 100 e.kr.) til 2 958 465 (desember 31 desember 9999 e.kr.). Datoverdien 0 representerer 30. desember 1899. Access lagrer datoer før 30. desember 1899 som negative tall.

Gyldige klokkeslettverdier strekker seg fra.0 (00: 00:00) til.99999 (23: 59:59). Den numeriske verdien representerer en del av en dag. Du kan konvertere den numeriske verdien for timer, minutter og sekunder ved å multiplisere den numeriske verdien med 24.

Tabellen nedenfor viser hvordan Access lagrer dato/klokkeslett-verdier:
Double Date Actual Time Actual
number portion date portion time
------------------------------------------------------------------

1.0 1 December 31, 1899 .0 12:00:00 A.M.
2.5 2 January 1, 1900 .5 12:00:00 P.M.
27468.96875 27468 March 15, 1975 .96875 11:15:00 P.M.
36836.125 36836 November 6, 2000 .125 3:00:00 A.M.
Hvis du vil vise hvordan Access lagrer dato-/ klokkeslettverdier som tall, skriver du inn kommandoene nedenfor i øyeblikksvinduet, trykk ENTER, og deretter se resultatene:

?CDbl(#5/18/1999 14:00:00#)
Resultatet er lik: 36298.5833333333

?CDbl(#12/14/1849 17:32:00#)
Resultatet er lik:-18278.7305555556

Hvis du vil vise datoen og tidspunktet for numeriske verdier, skriver du inn kommandoene nedenfor i øyeblikksvinduet, trykk ENTER, og merk deretter resultatene:

?CVDate(1.375)
Resultatet er lik: 31/12/1899 9:00:00 AM

?CVDate(-304398.575)
Resultatet er lik: 1/8/1066 1:48:00 PM

Formatere et dato/klokkeslett-felt

Du kan formatere en dato/klokkeslett-verdi hvis du vil vise en dato, et klokkeslett eller begge deler. Når du bruker en bare dato-formatet, lagres en verdi på 0 for klokkeslett-delen. Når du bruker en bare klokkeslett-formatet, lagres en verdi på 0 for datodelen.

Tabellen nedenfor viser hvordan Access lagrer dato-/ klokkeslettverdier. Tabellen nedenfor viser også hvordan du kan vise disse verdiene ved å bruke forskjellige formater:
Stored value Default format Custom format
(double number) (General Date) (mm/dd/yyyy hh:nn:ss A.M./P.M.)
---------------------------------------------------------------------

36295.0 5/15/99 05/15/1999 12:00:00 AM
0.546527777777778 1:07 PM 12/30/1899 01:07:00 PM
36232.9375 3/13/99 10:30PM 03/13/1999 10:30:00 PM
Obs! Standardformat for et dato/klokkeslett-verdi er dato. Hvis en verdi er bare dato, vises ikke. Hvis verdien er bare klokkeslett, vises ingen dato.

Beregne tidsdata

Fordi en tidsverdi lagres som en del av en 24-timers dag, kan du får feil formateringsresultater når du beregner tidsintervaller som er større enn 24 timer. Hvis du vil omgå dette problemet, kan du opprette en brukerdefinert funksjon for å forsikre deg om at tidsintervaller er riktig formatert.

Microsoft bruker ment som eksempler, uten garanti, verken direkte eller indirekte. Dette inkluderer, men er ikke begrenset til, eventuelle stilltiende garantier om salgbarhet eller anvendelighet for særskilte formål. Denne artikkelen forutsetter at du er kjent med programmeringsspråket som anvendes, og verktøyene som brukes til å opprette og feilsøke prosedyrer. Microsofts kundestøtteteknikere kan hjelpe deg med å forklare funksjonaliteten til en bestemt prosedyre, men de endrer ikke disse eksemplene for å lage forbedret funksjonalitet eller lage prosedyrer som dekker dine spesifikke behov. Til å beregne riktig og formatere tidsintervaller, gjør du følgende:

  1. Opprett en modul, og skriv deretter inn følgende linje i deklarasjonsdelen hvis følgende linje ikke allerede finnes der:

    Option Explicit
  2. Skriv inn følgende prosedyre:

    '------------------------------------------------------------------
    ' 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. Skriv inn følgende linje i vinduet, og trykk deretter ENTER:

    ? ElapsedTime(#6/1/1999 8:23:00PM#-#6/1/1999 8:12:12AM#)
    Legg merke til at det vises følgende verdier:

    43848 sekunder
    730:48 Minutes:Seconds
    12:10:48 Hours:Minutes:Seconds
    0 dager 12 timer 10 minutter 48 sekunder

Sammenligne datodata

Fordi datoer og klokkeslett er lagret sammen som flyttall med dobbel presisjon tall, kan du få uventede resultater når du sammenligner dato/klokkeslettdata. Hvis du for eksempel skriver du inn følgende uttrykk i øyeblikksruten, du får resultatet Usann selv om dagens dato er 3/31/1999:

? Now()=DateValue("3/31/1999")
Nå() -funksjonen returnerer et tall med dobbel presisjon som representerer gjeldende dato og gjeldende klokkeslett. Funksjonen DateValue() returnerer imidlertid et heltall som representerer datoen, men ikke en delvis tidsverdi. Derfor nå() er lik DateValue() bare når nå() returnerer et klokkeslett til 00:00:00 (12:00:00 AM).

For å få nøyaktige resultater når du sammenligne datoverdier, kan du bruke én av følgende funksjoner. Hvis du vil teste hver funksjon, skriver du inn funksjonen i øyeblikksruten, erstatte gjeldende dato for 3/31/1999, og trykk deretter ENTER:

  • Hvis du vil returnere en heltallsverdi, kan du bruke funksjonen Date() :

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

  • Hvis du vil fjerne desimaldelen av nå() -funksjonen, kan du bruke funksjonen Int() :

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

Sammenligne tidsdata

Når du sammenligner verdiene, kan du få inkonsekvente resultater fordi en tidsverdi lagres som brøkdelen av et tall med dobbel presisjon, flyttall. Hvis du for eksempel skriver du inn følgende uttrykk i øyeblikksruten, får du resultatet USANN (0) selv om tiden to verdier ser like:

var1 = #2:01:00 PM#
var2 = DateAdd ("n", 10, var1)
? var2 = #2:11:00 PM#
Når en tidsverdi konverteres til en brøk, er det ikke sikkert at det beregnede resultatet lik verdi. Liten forskjellen skyldes beregningen er tilstrekkelig til å produsere et resultat for Usann (0) når du sammenligner en lagret verdi til en konstant verdi.

For å få nøyaktige resultater når du sammenligner verdiene, kan du bruke en av følgende metoder. Hvis du vil teste hver metode, skriver du inn hver metode i Immediate-vinduet, og trykk deretter ENTER:

Legge til en tilknyttet dato klokkeslett sammenligningen:

var1 = #1/1/99 2:01:00 PM#
var2 = DateAdd ("n", 10, var1)
? var2 = #1/1/99 2:11:00 PM#
Konvertere tidsverdier til string-datatyper før du kan sammenligne dem:

var1 = #2:01:00 PM#
var2 = DateAdd ("n", 10, var1)
? CStr(var2) = CStr(#2:11:00 PM#)
Bruk DateDiff()-funksjonen til å sammenligne presis enheter for eksempel sekunder:

var1 = #2:01:00 PM#
var2 = DateAdd ("n", 10, var1)
? DateDiff ("s", var2, # 2:11:00 PM #) = 0

Referanser

Hvis du vil ha mer informasjon om hvordan du beregner dato og klokkeslettverdier, kan du klikke følgende artikkelnummer for å vise artikkelen i Microsoft Knowledge Base:

210604 funksjoner for å beregne og vise dato-/ klokkeslettverdier i Access

Hvis du vil ha mer informasjon om hvordan du formaterer data av typen Dato/klokkeslett, klikker du Hjelp for Microsoft Access på den
Hjelp -menyen, skriver inn format egenskapen - dato/klokkeslett-datatype i Office-hjelperen eller svarveiviseren, og klikk deretter Søk for å vise emnet.

Trenger du mer hjelp?

Utvid ferdighetene dine

Utforsk opplæring >

Vær først ute med de nye funksjonene

BLI MED I MICROSOFT INSIDERS >

Var denne informasjonen nyttig?

Hvor fornøyd er du med språkkvaliteten?
Hva påvirket opplevelsen din?

Takk for tilbakemeldingen!

×