On sait qu'une valeur date et heure est emmagazinée comme un nombre à
virgule flottante, avec la portion fractionnaire qui décrit le temps. La
partie entière décrit le nombre de jours depuis de 30 décembre 1899. Si ce
choix semble suspect, la légende veut qu'initialement, on a désiré avoir le
jour 1 comme le premier janvier 1900, mais s'étant fourvoyé, ayant cru que
1900 était bisextile alors qu'elle ne l'est pas, on a reculé l'origine de 1
jour de plus, ce qui n'affectait pas les dates postérieures au premier mars
1900.
Mais l'anomalie que je tiens à signaler n'est pas sur la date, mais sur
la portion heure. En effet, .125, en VBA, représente toujours 03:00:00,
quelque soit son signe! En effet, ouvrez MS Word, faire Alt-F11 pour entrer
dans VBE, et, dans la fenêtre d'exécution immédiate (Ctrl-G si requis),
faire:
On se rend compte que -.125 et +.125 produisent exactement le même instant
dans le temps, date_et_heure. Cette anomalie vient perturber un grand nombre
d'opérations sur les dates représentées par un nombre négatif. En effet,
même si le nombre est négatif, la portion fractionnaire doit toujours être
lue comme si elle était positive.
soit, .125 implique 03:00:00, que le nombre soit positif, ou négatif. Une
fois qu'on s'est habitué à ce concept pour le moins surprenant, on peut
ainsi expliquer d'autres anomalies. Ainsi, si au jour qui correspond au
nombre -12345, à minuit, j'ajoute, arithmétiquement, 0.00001, soit environ
une seconde (une seconde =.= un dix-millième de jour) :
? -12345 + 0.00001
-12344.99999
eh bien, si j'interprète ce nombre en tant que date et heure, je me retrouve
à 23:59:59. le jour qui suit. Donc, en ajoutant, arithmétiquement, un
dix-millième, j'ai, de fait, pratiquement ajouté DEUX jours ! Confirmation
par expérimentation:
Si on croyait ajouter une seconde, on est surpris, ou on devrait l'être...
Il faut donc éviter d'utiliser l'arithmétique en point flottant sur des
dates et heures d'avant le 30 décembre 1899, à moins de savoir ce qu'on
fait, effectivement. Il est fortement conceillé d'utiliser DateAdd et
fonctions prédéfinies, si on prévoit avoir à travailler avec de telles
dates, car elles fournissent les résultats escomptés:
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Pierre CFI
bonjour Impressionnant ta démo :Oo>
-- Pierre CFI MVP Microsoft Access
Site pour bien commencer http://users.skynet.be/mpfa/ Site perso http://access.cfi.free.fr "Michel Walsh" a écrit dans le message de news:
Bonjour,
On sait qu'une valeur date et heure est emmagazinée comme un nombre à virgule flottante, avec la portion fractionnaire qui décrit le temps. La partie entière décrit le nombre de jours depuis de 30 décembre 1899. Si ce choix semble suspect, la légende veut qu'initialement, on a désiré avoir le jour 1 comme le premier janvier 1900, mais s'étant fourvoyé, ayant cru que 1900 était bisextile alors qu'elle ne l'est pas, on a reculé l'origine de 1 jour de plus, ce qui n'affectait pas les dates postérieures au premier mars 1900.
Mais l'anomalie que je tiens à signaler n'est pas sur la date, mais sur la portion heure. En effet, .125, en VBA, représente toujours 03:00:00, quelque soit son signe! En effet, ouvrez MS Word, faire Alt-F11 pour entrer dans VBE, et, dans la fenêtre d'exécution immédiate (Ctrl-G si requis), faire:
On se rend compte que -.125 et +.125 produisent exactement le même instant dans le temps, date_et_heure. Cette anomalie vient perturber un grand nombre d'opérations sur les dates représentées par un nombre négatif. En effet, même si le nombre est négatif, la portion fractionnaire doit toujours être lue comme si elle était positive.
soit, .125 implique 03:00:00, que le nombre soit positif, ou négatif. Une fois qu'on s'est habitué à ce concept pour le moins surprenant, on peut ainsi expliquer d'autres anomalies. Ainsi, si au jour qui correspond au nombre -12345, à minuit, j'ajoute, arithmétiquement, 0.00001, soit environ une seconde (une seconde =.= un dix-millième de jour) :
? -12345 + 0.00001 -12344.99999
eh bien, si j'interprète ce nombre en tant que date et heure, je me retrouve à 23:59:59. le jour qui suit. Donc, en ajoutant, arithmétiquement, un dix-millième, j'ai, de fait, pratiquement ajouté DEUX jours ! Confirmation par expérimentation:
Si on croyait ajouter une seconde, on est surpris, ou on devrait l'être...
Il faut donc éviter d'utiliser l'arithmétique en point flottant sur des dates et heures d'avant le 30 décembre 1899, à moins de savoir ce qu'on fait, effectivement. Il est fortement conceillé d'utiliser DateAdd et fonctions prédéfinies, si on prévoit avoir à travailler avec de telles dates, car elles fournissent les résultats escomptés:
Espérant que ce petit exposé a su vous divertir, Vanderghast, Access MVP
bonjour
Impressionnant ta démo :Oo>
--
Pierre CFI
MVP Microsoft Access
Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Michel Walsh" <vanderghast@msn.com> a écrit dans le message de news: elq5LyfgDHA.1440@TK2MSFTNGP12.phx.gbl...
Bonjour,
On sait qu'une valeur date et heure est emmagazinée comme un nombre à
virgule flottante, avec la portion fractionnaire qui décrit le temps. La
partie entière décrit le nombre de jours depuis de 30 décembre 1899. Si ce
choix semble suspect, la légende veut qu'initialement, on a désiré avoir le
jour 1 comme le premier janvier 1900, mais s'étant fourvoyé, ayant cru que
1900 était bisextile alors qu'elle ne l'est pas, on a reculé l'origine de 1
jour de plus, ce qui n'affectait pas les dates postérieures au premier mars
1900.
Mais l'anomalie que je tiens à signaler n'est pas sur la date, mais sur
la portion heure. En effet, .125, en VBA, représente toujours 03:00:00,
quelque soit son signe! En effet, ouvrez MS Word, faire Alt-F11 pour entrer
dans VBE, et, dans la fenêtre d'exécution immédiate (Ctrl-G si requis),
faire:
On se rend compte que -.125 et +.125 produisent exactement le même instant
dans le temps, date_et_heure. Cette anomalie vient perturber un grand nombre
d'opérations sur les dates représentées par un nombre négatif. En effet,
même si le nombre est négatif, la portion fractionnaire doit toujours être
lue comme si elle était positive.
soit, .125 implique 03:00:00, que le nombre soit positif, ou négatif. Une
fois qu'on s'est habitué à ce concept pour le moins surprenant, on peut
ainsi expliquer d'autres anomalies. Ainsi, si au jour qui correspond au
nombre -12345, à minuit, j'ajoute, arithmétiquement, 0.00001, soit environ
une seconde (une seconde =.= un dix-millième de jour) :
? -12345 + 0.00001
-12344.99999
eh bien, si j'interprète ce nombre en tant que date et heure, je me retrouve
à 23:59:59. le jour qui suit. Donc, en ajoutant, arithmétiquement, un
dix-millième, j'ai, de fait, pratiquement ajouté DEUX jours ! Confirmation
par expérimentation:
Si on croyait ajouter une seconde, on est surpris, ou on devrait l'être...
Il faut donc éviter d'utiliser l'arithmétique en point flottant sur des
dates et heures d'avant le 30 décembre 1899, à moins de savoir ce qu'on
fait, effectivement. Il est fortement conceillé d'utiliser DateAdd et
fonctions prédéfinies, si on prévoit avoir à travailler avec de telles
dates, car elles fournissent les résultats escomptés:
Site pour bien commencer http://users.skynet.be/mpfa/ Site perso http://access.cfi.free.fr "Michel Walsh" a écrit dans le message de news:
Bonjour,
On sait qu'une valeur date et heure est emmagazinée comme un nombre à virgule flottante, avec la portion fractionnaire qui décrit le temps. La partie entière décrit le nombre de jours depuis de 30 décembre 1899. Si ce choix semble suspect, la légende veut qu'initialement, on a désiré avoir le jour 1 comme le premier janvier 1900, mais s'étant fourvoyé, ayant cru que 1900 était bisextile alors qu'elle ne l'est pas, on a reculé l'origine de 1 jour de plus, ce qui n'affectait pas les dates postérieures au premier mars 1900.
Mais l'anomalie que je tiens à signaler n'est pas sur la date, mais sur la portion heure. En effet, .125, en VBA, représente toujours 03:00:00, quelque soit son signe! En effet, ouvrez MS Word, faire Alt-F11 pour entrer dans VBE, et, dans la fenêtre d'exécution immédiate (Ctrl-G si requis), faire:
On se rend compte que -.125 et +.125 produisent exactement le même instant dans le temps, date_et_heure. Cette anomalie vient perturber un grand nombre d'opérations sur les dates représentées par un nombre négatif. En effet, même si le nombre est négatif, la portion fractionnaire doit toujours être lue comme si elle était positive.
soit, .125 implique 03:00:00, que le nombre soit positif, ou négatif. Une fois qu'on s'est habitué à ce concept pour le moins surprenant, on peut ainsi expliquer d'autres anomalies. Ainsi, si au jour qui correspond au nombre -12345, à minuit, j'ajoute, arithmétiquement, 0.00001, soit environ une seconde (une seconde =.= un dix-millième de jour) :
? -12345 + 0.00001 -12344.99999
eh bien, si j'interprète ce nombre en tant que date et heure, je me retrouve à 23:59:59. le jour qui suit. Donc, en ajoutant, arithmétiquement, un dix-millième, j'ai, de fait, pratiquement ajouté DEUX jours ! Confirmation par expérimentation:
Si on croyait ajouter une seconde, on est surpris, ou on devrait l'être...
Il faut donc éviter d'utiliser l'arithmétique en point flottant sur des dates et heures d'avant le 30 décembre 1899, à moins de savoir ce qu'on fait, effectivement. Il est fortement conceillé d'utiliser DateAdd et fonctions prédéfinies, si on prévoit avoir à travailler avec de telles dates, car elles fournissent les résultats escomptés: