Come archiviare, calcolare e confrontare i dati di data/ora in Microsoft Access
Riepilogo
Questo articolo descrive in che modo Microsoft Access archivia il tipo di dati Data/ora. Questo articolo descrive anche il motivo per cui è possibile ricevere risultati imprevisti quando si calcolano date e ore o si confrontano date e ore.
Questo articolo descrive gli argomenti seguenti:
- Archiviare dati di data/ora
- Formattare un campo Data/ora
- Calcolare i dati relativi all'ora
- Confrontare i dati relativi alla data
- Confrontare i dati relativi all'ora
Ulteriori informazioni
Archiviare dati di data/ora
Access archivia il tipo di dati Data/ora come numero a virgola mobile a precisione doppia fino a 15 posizioni decimali. La parte intera del numero a precisione doppia rappresenta la data. La parte decimale rappresenta l'ora.
I valori di data validi sono compresi tra -657.434 (1 gennaio 100 d.C.) e 2.958.465 (31 dicembre 9999 d.C.). Un valore per la data uguale a 0 rappresenta il 30 dicembre 1899. Access archivia le date precedenti al 30 dicembre 1899 come numeri negativi.
I valori validi per l'ora sono compresi tra 0,0 (00.00.00) e 0,99999 (23.59.59). Il valore numerico rappresenta una frazione di un giorno. È possibile convertire il valore numerico in ore, in minuti e in secondi moltiplicando il valore numerico per 24.
Nella tabella seguente viene illustrato come In Access vengono archiviati i valori di data/ora:
Numero doppio | Parte data | Data effettiva | Parte relativa all'ora | Tempo effettivo |
---|---|---|---|---|
1.0 | 1 | 31 dicembre 1899 | .0 | Ore 12:00:00 |
2.5 | 2 | 1 gennaio 1900 | 0,5 | 12:00:00 p.m. |
27468.96875 | 27468 | 15 marzo 1975 | .96875 | 23:15:00 |
36836.125 | 36836 | 6 novembre 2000 | .125 | Ore 3:00:00 |
Per visualizzare il modo in cui i valori di data/ora vengono archiviati come numeri, digitare i comandi seguenti nella finestra Immediata, premere INVIO e quindi notare i risultati:
? CDbl(#5/18/1999 14:00:00#)
Risultato uguale a: 36298.58333333333
? CDbl(#12/14/1849 17:32:00#)
Risultato uguale a: -18278.730555556
Per visualizzare la data e l'ora dei valori numerici, digitare i comandi seguenti nella finestra Immediata, premere INVIO e quindi notare i risultati:
? CVDate(1.375)
Risultato uguale a: 31/12/1899 9:00:00
? CVDate(-304398.575)
Risultato uguale a: 1/8/1066 13:48:00
Formattare un campo Data/ora
È possibile formattare un valore di data/ora per visualizzare una data, un'ora o entrambi. Quando si usa un formato di sola data, access archivia un valore pari a 0 per la parte relativa all'ora. Quando si usa un formato di sola ora, Access archivia un valore pari a 0 per la parte relativa alla data.
Nella tabella seguente viene illustrato come In Access vengono archiviati i valori di data/ora. Nella tabella seguente viene inoltre illustrato come visualizzare tali valori usando formati diversi:
Valore archiviato (numero doppio) | Formato predefinito (data generale) | Formato personalizzato (mm/dd/aaaa hh:nn:ss A.M./P.M.) |
---|---|---|
36295.0 | 5/15/99 | 15/05/1999 12:00:00 |
0.546527777777778 | 13:07 | 30/12/1899 13:07:00 |
36232.9375 | 3/13/99 | 22:30 13/03/1999 22:30:00 |
Nota Il formato predefinito per un valore di data/ora è Data generale. Se un valore è di sola data, non viene visualizzata alcuna ora. Se il valore è di sola ora, non viene visualizzata alcuna data.
Calcolare i dati relativi all'ora
Poiché il valore relativo all'ora viene memorizzato come frazione di un giorno di 24 ore, è possibile che vengano visualizzati risultati con formati non corretti quando si calcolano intervalli dei valori di ora maggiori di 24 ore. Per risolvere questo comportamento, è possibile creare una funzione definita dall'utente per assicurarsi che gli intervalli di tempo siano formattati correttamente.
Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presuppone che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle procedure. Gli esperti Microsoft sono autorizzati a fornire spiegazioni in merito alla funzionalità di una particolare routine, ma in nessun caso a modificare questi esempi per fornire funzionalità aggiuntive o a creare routine atte a soddisfare specifiche esigenze. Per calcolare correttamente e formattare gli intervalli di tempo, seguire questa procedura:
Creare un modulo e quindi digitare la riga seguente nella sezione Dichiarazioni se la riga seguente non è già presente:
Opzione esplicita
Digitare la procedura seguente:
'------------------------------------------------------------------ ' 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
Digitare la riga seguente nella finestra Immediata e quindi premere INVIO:
? ElapsedTime(#6/1/1999 8:23:00PM#-#6/1/1999 8:12:12AM#)
Si noti che vengono visualizzati i valori seguenti:
43848 Seconds
730:48 Minutes:Seconds
12:10:48 Hours:Minutes:Seconds
0 days 12 Hours 10 Minutes 48 Seconds
Confrontare i dati relativi alla data
Poiché i valori di data e ora vengono memorizzati insieme come numeri a precisione doppia, è possibile ricevere risultati imprevisti quando si confrontano dati Data/ora. Ad esempio, se si digita l'espressione seguente nella finestra Immediata, si riceve un risultato False anche se la data odierna è il 31/3/03/1999:
? Now()=DateValue("31/31/1999")
La funzione Now() restituisce un numero a precisione doppia che rappresenta la data corrente e l'ora corrente. Tuttavia, la funzione DateValue() restituisce un numero intero che rappresenta la data ma non un valore di ora frazionaria. Now() è quindi uguale a DateValue() solo quando Now() restituisce un'ora pari a 00:00:00 (12:00:00 a.M.).
Per ricevere risultati precisi quando si confrontano i valori di data, utilizzare una delle funzioni seguenti. Per testare ogni funzione, digitare la funzione nella finestra Immediata, sostituire la data corrente con il 31/31/1999 e quindi premere INVIO:
Per restituire un valore intero, usare la funzione Date():
? Date()=DateValue("3/31/1999")
Per rimuovere la parte frazionaria della funzione Now(), usare la funzione Int():
? Int(Now())=DateValue("3/31/1999")
Confrontare i dati relativi all'ora
Quando si confrontano i valori di ora, è possibile che vengano visualizzati risultati incoerenti perché un valore di ora viene archiviato come parte frazionaria di un numero a virgola mobile a precisione doppia. Ad esempio, se si digita l'espressione seguente nella finestra Immediata, si riceve un risultato false (0) anche se i due valori di ora hanno lo stesso aspetto:
var1 = #2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? var2 = #2:11:00 PM#
Quando Access converte un valore di tempo in una frazione, il risultato calcolato potrebbe non essere identico al valore di ora. La piccola differenza causata dal calcolo è sufficiente per produrre un risultato false (0) quando si confronta un valore archiviato con un valore costante.
Per ricevere risultati precisi quando si confrontano i valori di ora, utilizzare uno dei metodi seguenti. Per testare ogni metodo, digitare ogni metodo nella finestra Immediata e quindi premere INVIO:
Aggiungere una data associata al confronto dei valori di ora:
var1 = #1/1/99 14:01:00#
var2 = DateAdd("n", 10, var1)
? var2 = #1/1/99 14:11:00#
Convertire i valori di ora in tipi di dati stringa prima di confrontarli:
var1 = #2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? CStr(var2) = CStr(#2:11:00 PM#)
Usare la funzione DateDiff() per confrontare unità precise, ad esempio secondi:
var1 = #2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? DateDiff("s", var2, #2:11:00 PM#) = 0
Riferimenti
Per altre informazioni sul calcolo dei valori di data e ora, vedere Funzione DateSerial
Per altre informazioni su come formattare i tipi di dati data/ora, fare clic su Guida di Microsoft Access nel menu ? , digitare proprietà formato - tipo di dati data/ora nell'Assistente di Office o nella Ricerca guidata e quindi fare clic su Cerca per visualizzare l'argomento.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per