Comparer des dates facilement [C] - C - Programmation
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
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.
Marsh Posté le 26-04-2005 à 17:04:21
sbucci2 a écrit : Bonjour, |
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.
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
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.
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é. |
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" !!!
Marsh Posté le 26-04-2005 à 19:50:33
sbucci2 a écrit : |
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é.
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.
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