Calculer le temps écoulé
Cette rubrique explique comment Access stocke le type de données Date/Heure et pourquoi vous pouvez obtenir des résultats inattendus lorsque vous comparez des dates et des heures.
Stocker des données de date/heure
Access stocke les données de type Date/Heure sous forme de nombre de double précision à virgule flottante (jusqu'à 15 décimales). La partie entière du nombre de double précision représente la date, la partie décimale, quant à elle, représente l'heure.
Les valeurs de date valides vont de -647 434 (1er janvier 100, A.D.) à 2 958 465 (31 décembre 9999, AD). La valeur de date 0 représente le 30 décembre 1899. Access stocke les dates antérieures au 30 décembre 1899 sous forme de nombres négatifs.
Les valeurs d'heure correctes sont comprises entre .0 (00:00:00) et .99999 (23:59:59). La valeur numérique représente une fraction d'une journée. Vous pouvez convertir la valeur numérique en heures, minutes et secondes en multipliant la valeur numérique par 24.
Nombre double | Partie date | Date réelle | Partie temps | Heure réelle |
---|---|---|---|---|
1.0 | 1 | 31 décembre 1899 | 0,0 | 00:00:00. |
2,5 | 2 | 1er janvier 1900 | 0,5 | 12:00:00. |
27468,96875 | 27468 | 15 mars 1975 | 0,96875 | 23:15:00. |
33914,125 | 33914 | 6 novembre 1992 |
Calculer les données de temps
Étant donné qu'une valeur d'heure est stockée en tant que fraction d'une journée de 24 heures, vous pouvez obtenir des résultats incorrects de mise en forme lorsque vous calculez des intervalles de temps supérieurs à 24 heures. Pour éviter ce problème, vous pouvez créer votre propre fonction pour que les intervalles de temps soient correctement mis en forme.
La procédure suivante montre comment utiliser la fonction Format pour mettre en forme les intervalles de temps. La procédure accepte deux valeurs d'heure et affiche, dans différents formats, l'intervalle entre elles dans la fenêtre Exécution.
Function ElapsedTime(endTime As Date, startTime As Date)
Dim strOutput As String
Dim Interval As Date
' Calculate the time interval.
Interval = endTime - startTime
' Format and print the time interval in seconds.
strOutput = Int(CSng(Interval * 24 * 3600)) & " Seconds"
Debug.Print strOutput
' Format and print the time interval in minutes and seconds.
strOutput = Int(CSng(Interval * 24 * 60)) & ":" & Format(Interval, "ss") _
& " Minutes:Seconds"
Debug.Print strOutput
' Format and print the time interval in hours, minutes and seconds.
strOutput = Int(CSng(Interval * 24)) & ":" & Format(Interval, "nn:ss") _
& " Hours:Minutes:Seconds"
Debug.Print strOutput
' Format and print the time interval in days, hours, minutes and seconds.
strOutput = Int(CSng(Interval)) & " days " & Format(Interval, "hh") _
& " Hours " & Format(Interval, "nn") & " Minutes " & _
Format(Interval, "ss") & " Seconds"
Debug.Print strOutput
End Function
Comparer les données de date
Étant donné que les dates et les heures sont stockées ensemble en tant que nombres de double précision, il peut arriver que vous obteniez des résultats inattendus lorsque vous comparez des données Date/Heure. Par exemple, si vous tapez l'expression suivante dans la fenêtre Exécution, vous obtenez un résultat faux (0) même si la date du jour est 11/07/2006 :
? Now()=DateValue("7/11/2006")
La fonction Now retourne un nombre de double précision représentant la date et l’heure actuelles. Cependant, la fonction DateValue renvoie un nombre entier représentant la date mais pas une valeur d'heure fractionnelle. Par conséquent, la fonction Now ne produit une valeur égale à celle de la fonction DateValue que si Now renvoie 00:00:00 (12:00:00 A.M.).
Pour obtenir des résultats précis lorsque vous comparez des valeurs de date, utilisez une des fonctions suivantes. Pour tester chaque fonction, tapez celle-ci dans la fenêtre Exécution, remplacez 11/07/2006 par la date actuelle, puis appuyez sur Entrée :
Pour renvoyer une valeur entière, utilisez la fonction Date :
?Date()=DateValue("7/11/2006")
Pour supprimer la partie fractionnaire de la fonction Now , utilisez la fonction Int :
?Int(Now())=DateValue("7/11/2006")
Comparer les données de temps
Lorsque vous comparez des valeurs d'heure, il peut arriver que vous obteniez des résultats incohérents, car une valeur d'heure est stockée en tant que partie fractionnelle d'un nombre de double précision à virgule flottante. Par exemple, si vous tapez l'expression suivante dans la fenêtre Exécution, vous obtenez un résultat faux (0) même si les deux valeurs d'heure semblent identiques :
var1 = #2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? var2 = #2:11:00 PM#
Lorsqu’Access convertit une valeur d’heure en fraction, le résultat calculé peut être l’équivalent exact de la valeur d’heure. La petite différence produite par le calcul est suffisante pour produire un résultat faux (0) lorsque vous comparez une valeur stockée à une valeur constante.
Pour obtenir des résultats précis lorsque vous comparez des valeurs d'heure, utilisez une des méthodes suivantes. Pour tester chaque méthode, tapez celle-ci dans la fenêtre Exécution, puis appuyez sur Entrée :
Ajoutez une date associée à la comparaison d'heures :
var1 = #7/11/2006 2:00:00 PM#
var2 = DateAdd("n", 10, var1)
? var2 = #7/11/2006 2:10:00 PM#
Convertissez les valeurs d'heure en données de type String avant de les comparer :
var1 = #2:00:00 PM#
var2 = DateAdd("n", 10, var1)
? CStr(var2) = CStr(#2:10:00 PM#)
Utilisez la fonction DateDiff pour comparer des unités précises telles que les secondes :
var1 = #2:00:00 PM#
var2 = DateAdd("n", 10, var1)
? DateDiff("s", var2, #2:10:00 PM#) = 0
À propos des collaborateurs
Lien fourni par l’icône de la communauté UtterAccess .
- Page relative à la somme du temps écoulé pouvant dépasser 24 heures
UtterAccess est le forum d’aide et wiki de Microsoft Access de référence.
Voir aussi
- Forum Access pour les développeurs
- Aide Access sur support.office.com
- Forums Access sur UtterAccess
- Centre d'aide pour les développeurs Access et la programmation VBA (FMS)
- Billets sur Access sur StackOverflow
Assistance et commentaires
Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour