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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.