IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

TDateTime un bogue ?


Sujet :

Langage Delphi

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut TDateTime un bogue ?
    Bonjour a tous.

    Je voudrais savoir combien de jours séparent,

    Le 01/01/0001 du 01/01/0801.

    C' est pour m' enlever un doute persistant,

    dans la Fonction YearsBetween et DaysBetween sous Delphi 7.

    Merci d' avance.

    Reivillo.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 141
    Points : 142
    Points
    142
    Par défaut
    Salut,

    L'aide de D7 dit la chose suivante :

    Toutes les années n'ayant pas la même longueur (en raison des années bissextiles), YearsBetween renvoie une valeur approximative basée sur une année de 365,25 jours. Les années non entières ne sont pas comptabilisées. De ce fait, par exemple, YearsBetween traduit la différence entre le 1er janvier et le 31*décembre par 0 pour les années non bissextiles et par 1 pour les années bissextiles.
    DaysBetween se contente de faire une différence entre les parties entières des deux dates.


    Tu te poses des questions d'un point de vue d'historien (ie: type qui dit qu'avant 1582 on n'avait pas le calendrier grégorien etc etc), ou juste du point de vue d'un type qui demande les règles pour déterminer si une année est bissextile ou non (dans ce cas, tu peux lire cette page web)?
    *LeGEC*

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour LeGEC.
    merci pour la réponse.

    Donc la difference est de 800 ans:
    Pour moi et l' Horloge parlante.(Lien ci-dessous).
    et 799 pour YearsBetween.

    Soit 292202 jours pour moi,
    292200 jours pour l' Horloge parlante:
    qui apparament oublie 1 an tous les 400 ans.
    292193 jours pour DaysBetween:
    qui décompte 1 an tous les 100 ans.


    http://www.horlogeparlante.com/calc_time.php

    A+.
    Reivillo.

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 745
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 745
    Points : 13 306
    Points
    13 306
    Par défaut
    Pour une année moyenne de 365.25 jours, cela donne bien 292200 jours pour 800 ans. N'oublie pas que les siècles ne sont pas bissextiles sauf s'il sont divisibles par 4, d'où ton erreur de 2 jours sur 800 ans.

    Delphi est plus précis et utilise 365.2425 se qui donne 292194.

    On s'y perd en effet

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour Andnotor.

    D' accord, mais tous les 400 ans
    les années sont aussi bissextiles.(Voir le lien ci-dessous).
    Donc 800 ans*365.2525 = bien 292202 jours.
    Mes 2 jours supplémebtaire viennent de: 800/400 = 2.

    http://lwh.free.fr/pages/algo/calend..._gregorien.htm

    Reivillo.

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 745
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 745
    Points : 13 306
    Points
    13 306
    Par défaut
    Citation Envoyé par reivillo Voir le message
    D' accord, mais tous les 400 ans
    les années sont aussi bissextiles.
    C'est ce que je dis, les siècles divisibles par 4

    Maintenant, tu devrais plutôt en soustraire 6 (sur 800 ans) puisque les 3 premiers siècles (tout les 400 ans) on ne fait que 24 corrections/siècles, 25 seulement sur le 4ème. La correction tout les 400 ans étant pour corriger l'erreur de 11 minutes par année.

    11 minutes/année = 1100 minutes/siècle = 18 heures/siècle.

    Plutôt que d'ajouter 18 heures (25 années bissextiles/siècle) en ignore le dernier (25ième). Ce qui entraîne que de +18h, on passe à -6 heures (1 jour de moins = -24h). Après 2 siècles, -12h. 3, -18h. et le 4ème siècle, -24h => correction => bissextile .

    Tout cela pour dire que 365.25 est une approximation qui fonctionne parfaitement sur un court lapse de temps (disons la vie de l'un d'entre nous ) mais est erroné sur plusieurs siècles et à l'arrivée, la calculation Delphi est plus juste que ton site. Une année faisant toujours 365.2425 jours et non 365.25 .

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Re.

    Merci pour ces précisions,
    j' en prends acte.
    Désolé, je n' avais pas bien lu
    au sujet des siècles.
    Je pense qu' on va en rester là.

    Reivillo.

Discussions similaires

  1. Comment convertir une heure (TDateTime) locale en UTC/GMT
    Par rconty dans le forum C++Builder
    Réponses: 2
    Dernier message: 16/05/2005, 10h49
  2. Réponses: 4
    Dernier message: 18/04/2005, 09h06
  3. recuperer l'année d'un TDateTime
    Par gskoala dans le forum Paradox
    Réponses: 2
    Dernier message: 30/09/2004, 16h26
  4. Résultats erroné différence entre deux types TDateTime
    Par Alghero dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/03/2004, 17h03
  5. [regex][string] replaceAll bogué ?
    Par 7eme dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 13/11/2003, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo