[C] Comparer des dates facilement

Comparer des dates facilement [C] - C - Programmation

Marsh Posté le 26-04-2005 à 16:53:21    

Bonjour,
 
Me revoila avec un autre probleme !!!
Comment puis je faire pour comparer des dates au format dd-mmm-yyyy, ex: 10-jan-2004 facilement ?
 
Merci d'avance
Seb

Reply

Marsh Posté le 26-04-2005 à 16:53:21   

Reply

Marsh Posté le 26-04-2005 à 16:58:22    

Je pense que le plus simple serait de creer une structure Date et un type enuméré pour les mois.
Ca te permet de faire des comparaisons sur les mois


Message édité par Freeman656 le 26-04-2005 à 16:59:11
Reply

Marsh Posté le 26-04-2005 à 16:59:46    

Structure +1

Reply

Marsh Posté le 26-04-2005 à 17:02:22    

Plutôt que de créer une nouvelle structure, j'utiliserais plutôt struct tm, ce qui me permettrait en plus de convertir ça très facilement en secondes (écoulées depuis le 01/01/1970) => idéal pour les comparaisons.
 
Regarde ce que time.h a à t'offrir.


Message édité par Elmoricq le 26-04-2005 à 17:03:39
Reply

Marsh Posté le 26-04-2005 à 17:04:21    

sbucci2 a écrit :

Bonjour,
 
Me revoila avec un autre probleme !!!
Comment puis je faire pour comparer des dates au format dd-mmm-yyyy, ex: 10-jan-2004 facilement ?
 
Merci d'avance
Seb


 
Tout d'abord, si tu te trouves sur un Unix ou équivalent, ben les dates sont stockées en interne en secondes écoulées depuis le 1/1/1970.  
 
Et maintenant une page de pub: Ce codage simple sur un entier long signé (31 bits significatifs) permettra au système d'atteindre sans soucis l'an 2034 avant que ne se pose le pb de sa remise à 0 (équivalent au bug de l'an 2000). Mais déjà les programmeurs Linux se penchent sur un codage sur 63 ou 64 bits qui permettra au système d'atteindre la mort du soleil (zavez qu'à faire le calcul si vous ne me croyez pas).
 
Donc, si tes dates sont codées en interne comme cela (même si elles sont affichées sous la forme dd-mmm-yyyy), pas de pb de comparaison. Tu ne compares que 2 entiers.
 
Maintenant, si tu travailles sur un autre SE où tes dates sont codées en interne tel que tu le montres, alors t'as pas 36 solutions. Tu dois extraire de tes dates l'année, le mois et le jour, puis comparer les deux années, si elles sont égales comparer les deux mois et finir par les jours si les mois sont égaux.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 26-04-2005 à 17:08:17    

Je fais un outil qui analyse des fichiers de log (C + GTK). La date de ces fichiers est dans le nom du fichier et sous la forme sitée précédement.
 
J'ai vu qu'il y a un time.h pour le C. Des moyens d'utiliser cela.
 
Merci encore

Reply

Marsh Posté le 26-04-2005 à 17:08:43    

Citation :

Maintenant, si tu travailles sur un autre SE où tes dates sont codées en interne tel que tu le montres, alors t'as pas 36 solutions. Tu dois extraire de tes dates l'année, le mois et le jour, puis comparer les deux années, si elles sont égales comparer les deux mois et finir par les jours si les mois sont égaux.


 
?!
 
mktime() convertit toujours une date en nombre de secondes écoulées depuis le 01/01/1970, quel que soit le système utilisé.
 
C'est pas un truc Unix, c'est un truc C.
 
 
@sbucci2 > Regarde la struct tm, renseigne-là et utilise mktime() pour convertir une date en secondes. A partir de là, tu auras tes dates sous forme d'entier, ce qui pour comparer est on ne peut plus simple.


Message édité par Elmoricq le 26-04-2005 à 17:10:39
Reply

Marsh Posté le 26-04-2005 à 17:31:57    

va pour le mktime alors.
 
Merci

Reply

Marsh Posté le 26-04-2005 à 18:20:11    

Elmoricq a écrit :

mktime() convertit toujours une date en nombre de secondes écoulées depuis le 01/01/1970, quel que soit le système utilisé.
 
C'est pas un truc Unix, c'est un truc C.


Exact ! J'aurais du y penser !!! Il suffit juste d'avoir une variable "var" de type "struct tm" et remplir les membres "tm_mday", "tm_mon" et "tm_year" avec les bonnes valeurs puis d'appeler "mktime(&var)" => Ca renvoie le nb de secondes correspondant.
Attention pour "tm_year" car je crois qu'il considère que le début est "1900". C'est à dire que si on veut référencer l'année "2005", il faut rentrer "105" dans "tm_year" !!!


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 26-04-2005 à 19:50:33    

sbucci2 a écrit :


Comment puis je faire pour comparer des dates au format dd-mmm-yyyy, ex: 10-jan-2004 facilement ?


Convertir en 'struct tm', puis utiliser diffdate(). C'est du standard (bien lire la doc). Sinon, adopter (ou convertir dans) le format international : YYYY-MM-DD ou  YYYYMMDD. strcmp() peut alors être utilisé.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 26-04-2005 à 19:50:33   

Reply

Marsh Posté le 26-04-2005 à 23:23:16    

Ah tiens, je ne connaissais pas diffdate().
 
Par contre je suis une nouille de pas avoir pensé au format international : je l'utilise tout le temps, justement pour des raisons de tri. Impardonnable.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed