Re: Ada.Calendar.Time
Jean-Pierre Rosen <[email protected]>
| Newsgroups | gmane.comp.lang.ada.france |
|---|---|
| Message-ID | <[email protected]> |
Thomas De Contes a écrit :
>> Qu'est-ce qui ne va pas dans Ada.Calendar.Difference ?
>
> Tu veux dire Ada.Calendar.Arithmetic.Difference ?
Oui, bien sûr
> Qu'est ce que c'est les "leap seconds" ? c'est comme les 29/2 ?
Ce sont les secondes que l'on rajoute parfois entre le 31/12 et le 01/01
pour compenser le ralentissement de la rotation de la terre.
Officiellement, le nom de la leap-second est 23h 59mn 60s., ce qui pose
un problème vu que les secondes en Ada ne vont que jusqu'à 59. D'où les
quelques acrobaties pour contourner ce problème.
> Il parait que les OS ne les supportent pas tous (89/2),
> ça veut dire qu'une valeur de type Time donnée ne correspond pas
> forcément à la même date sur tous les ordinateurs ?
Un Time est un type privé, donc on ne peut pas se le passer d'un
ordinateur à l'autre. De toute façon, Ada ne peut connaître que l'heure
renvoyée par la machine. Donc, il ne peut gérer les leap-seconds que si
l'OS est au courant.
Au passage, note que pour le passé on peut avoir une table des
leap-seconds, mais pas pour le futur, vu que les fluctuations sont
aléatoires.
> Pour commencer, le moins important :
> j'aurais préféré avoir un type entier pour les secondes (avec un
> paramètre Sub_Second en plus, si il le fallait)
Affaire de goût...
> Le paramètre Days, il est donné avec les "leap seconds" inclues ou
> exclues ?
C'est la différence de jours. Si un jour fait 86401 secondes, c'est son
problème...
> Si c'est "leap seconds" exclues, ça fait une difficulté pour calculer le
> nb de jours,
> puisqu'il faut vérifier si Seconds + Leap_Seconds ça fait pas un (ou des
> ?) jour en plus
>
> Si c'est "leap seconds" inclues, ça fait une difficulté pour calculer le
> nb de secondes,
> puisque deja Seconds c'est pas le nb de secondes total, mais le nb de
> secondes en plus des jours,
> mais en plus (si je suis pas à coté de la plaque) il ne suffit plus de
> multiplier le nb de jours par un coef fixe pour avoir le nb de secondes
> correspondant ...
C'est pas la peine de te faire des noeuds au cerveau avec ça: les leap
seconds sont rares, presque personne ne sait les gérer, et on peut
supposer que l'implémentation fait ce qu'il faut.
> Mais je vais devoir faire un paquetage pour manipuler ces données là,
> je ne peux pas utiliser Ada.Calendar.* en l'état directement dans un prgm
> (Par exemple :
> Si je fais la différence entre le 2 du mois à 23h50 et le 3 à 0h10, je
> vais avoir 0 j et 20 min de différence.
> Il faut que je choisisse une date de référence avec 0h0min0s, que je
> fasse la différence entre la date de référence et chaque date donnée,
> que j'arrondisse les résultats au jour près, et que je fasse la
> diference entre les résultats.
> Et là je trouverai 1 j de différence ! ouf ! :-) )
>
> Et reconnais que le risque d'erreurs n'est pas négligeable ...
> (principalement mauvaise gestion des "leap seconds")
>
Les calculs de date, c'est toujours la m... quel que soit le langage. Et
encore, tu n'as pas à gérer le passage du calendrier julien au
calendrier grégorien (passage qui s'est étendu sur plusieurs siècles
suivant les pays).
--
---------------------------------------------------------
J-P. Rosen ([email protected])
Visit Adalog's web site at http://www.adalog.fr
_______________________________________________
Site WWW de l'association Ada-France: http://www.ada-france.org/
[email protected]
http://www.ada-france.org/mailman/listinfo/ada-france