Comment stocker, calculer et comparer des données de date/heure dans Microsoft Access

Résumé

Cet article décrit comment Microsoft Access stocke le type de données Date/Heure. Cet article explique également pourquoi vous pouvez recevoir des résultats inattendus lorsque vous calculez des dates et des heures ou comparez des dates et des heures.

Cet article décrit les rubriques suivantes :

  • Stocker des données de date/heure
  • Mettre en forme un champ Date/Heure
  • Calculer les données de temps
  • Comparer les données de date
  • Comparer les données de temps

Informations supplémentaires

Stocker des données de date/heure

Access stocke le type de données Date/Heure sous la forme d’un nombre à virgule flottante double précision pouvant atteindre 15 décimales. La partie entière du nombre double précision représente la date. La partie décimale représente l’heure.

Les valeurs de date valides vont de -657 434 (1er janvier 100 après J.-C.) à 2 958 465 (31 décembre 9999 après J.-C.). La valeur de date 0 représente le 30 décembre 1899. Access stocke les dates antérieures au 30 décembre 1899 en tant que 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, en minutes et en secondes en multipliant la valeur numérique par 24.

Le tableau suivant montre comment Access stocke les valeurs Date/Heure :

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.
36836.125 36836 6 novembre 2000 .125 3 :00 :00

Pour voir comment Access stocke les valeurs Date/Heure sous forme de nombres, tapez les commandes suivantes dans la fenêtre Exécution, appuyez sur Entrée, puis notez les résultats :

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

Résultat égal à : 36298.5833333333

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

Résultat égal à : -18278.7305555556

Pour afficher la date et l’heure des valeurs numériques, tapez les commandes suivantes dans la fenêtre Exécution, appuyez sur Entrée, puis notez les résultats :

? CVDate(1.375)

Résultat égal : 31/12/1899 9 :00 :00 AM

? CVDate(-304398.575)

Résultat égal : 1/8/1066 1 :48 :00 PM

Mettre en forme un champ Date/Heure

Vous pouvez mettre en forme une valeur Date/Heure pour afficher une date, une heure ou les deux. Lorsque vous utilisez un format date uniquement, Access stocke la valeur 0 pour la partie heure. Lorsque vous utilisez un format d’heure uniquement, Access stocke la valeur 0 pour la partie date.

Le tableau suivant montre comment Access stocke les valeurs Date/Heure. Le tableau suivant montre également comment afficher ces valeurs à l’aide de différents formats :

Valeur stockée (double nombre) Format par défaut (Date générale) Format personnalisé (mm/jj/aaaa hh :nn :ss A.M./P.M.)
36295.0 5/15/99 15/05/1999 12 :00 :00 AM
0.546527777777778 13 :07 30/12/1899 01 :07 :00 PM
36232.9375 3/13/99 22 :30PM 03/13/1999 10 :30 :00 PM

Note Le format par défaut d’une valeur Date/Heure est Date générale. Si une valeur est date-only, aucune heure ne s’affiche. Si la valeur est time-only, aucune date n’apparaît.

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 contourner ce comportement, vous pouvez créer une fonction définie par l’utilisateur pour vous assurer que les intervalles de temps sont correctement mis en forme.

Microsoft fournit des exemples de programmation à titre d’illustration uniquement, sans garantie expresse ou implicite. Cela inclut, sans y être limité, les garanties implicites de commercialisation et d’adaptation à un but en particulier. Cet article considère que vous connaissez le langage de programmation présenté et les outils utilisés pour créer et déboguer des procédures. Les techniciens du Support technique Microsoft peuvent vous expliquer les fonctionnalités d’une procédure particulière, mais ils ne peuvent pas modifier les exemples en vue de vous fournir des fonctionnalités supplémentaires ou de créer des procédures répondant à vos besoins spécifiques. Pour calculer correctement et mettre en forme les intervalles de temps, procédez comme suit :

  1. Créez un module, puis tapez la ligne suivante dans la section Déclarations si la ligne suivante n’est pas déjà là :

    Option Explicit

  2. Tapez la procédure suivante :

    '------------------------------------------------------------------
    '  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. Tapez la ligne suivante dans la fenêtre Exécution, puis appuyez sur Entrée :

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

Notez que les valeurs suivantes s’affichent :

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

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 recevez un résultat False même si la date du jour est le 31/03/1999 :

? Now()=DateValue(« 3/3/1999 »)

La fonction Now() retourne un nombre de double précision qui représente la date actuelle et l’heure actuelle. Toutefois, la fonction DateValue() retourne un nombre entier qui représente la date, mais pas une valeur de temps fractionnaire. Par conséquent, Now() est égal à DateValue() uniquement lorsque Now() retourne une heure de 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 la fonction dans la fenêtre Exécution, remplacez la date du 31/03/1999, puis appuyez sur Entrée :

  • Pour renvoyer une valeur entière, utilisez la fonction Date() :

    ? Date()=DateValue(« 3/3/1999 »)

  • Pour supprimer la partie fractionnaire de la fonction Now(), utilisez la fonction Int() :

    ? Int(Now())=DateValue(« 3/3/1999 »)

Comparer les données de temps

Lorsque vous comparez des valeurs de temps, vous pouvez recevoir des résultats incohérents, car une valeur d’heure est stockée en tant que partie fractionnaire d’un nombre à virgule flottante double précision. Par exemple, si vous tapez l’expression suivante dans la fenêtre Exécution, vous recevez un résultat false (0) même si les deux valeurs de temps se ressemblent :

var1 = #2 :01 :00 PM#

var2 = DateAdd(« n », 10, var1)

? var2 = #2 :11 :00 PM#

Quand Access convertit une valeur d’heure en fraction, le résultat calculé peut ne pas être identique à la valeur de temps. La petite différence provoquée 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 chaque méthode dans la fenêtre Exécution, puis appuyez sur Entrée :

Ajoutez une date associée à la comparaison d'heures :

var1 = #1/1/99 2 :01 :00 PM#

var2 = DateAdd(« n », 10, var1)

? var2 = #1/1/99 2 :11 :00 PM#

Convertissez les valeurs de temps en types de données chaîne avant de les comparer :

var1 = #2 :01 :00 PM#

var2 = DateAdd(« n », 10, var1)

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

Utilisez la fonction DateDiff() pour comparer des unités précises telles que les secondes :

var1 = #2 :01 :00 PM#

var2 = DateAdd(« n », 10, var1)

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

References

Pour plus d’informations sur le calcul des valeurs de date et d’heure, consultez Fonction DateSerial

Pour plus d’informations sur la mise en forme des types de données Date/Heure, cliquez sur Aide de Microsoft Access dans le menu Aide , tapez propriété format - type de données date/heure dans l’Assistant Office ou l’Assistant Réponse, puis cliquez sur Rechercher pour afficher la rubrique.