Petits calculs sur le temps - C++ - Programmation
Marsh Posté le 06-12-2016 à 11:10:31
Bonjour !
C'est normal, la fonction time() a comme "temps 0" le 01/01/1970 (EPOCH d'UNIX), à 0h00, et renvoie le nombre de secondes depuis ce moment-là.
Les autres fonctions d'UNIX sont basées sur la même référence de temps (notamment mktime).
Il n'est donc pas surprenant que leur fonctionnement ne soit pas correct pour des dates antérieures.
Bonne continuation !
Edit : Le fait que vous ne rencontriez le problème qu'à partir du 01/12/1969 me fait pensez que vous remplissez "mal" le champ "mois" de la structure tm, qui doit être entre 0 et 11 (alors que le jour est entre 1 et 31 ). Comme la fonction modifie les valeurs, le transforme le 01/12 et 01/01 de l'année d'après, ce qui correspond au T0.
Marsh Posté le 06-12-2016 à 11:26:51
Merci pour ces infos
Je me demande si je vais pas tout calculer à la mano, mais j'ai du mal juste à obtenir la date, je vais bosser dessus
Marsh Posté le 06-12-2016 à 19:13:10
Bon ben j'ai bossé
Je tente un autre truc, créer 2 struct tm, un pour la date entrée et l'autre pour la date du jour. De là je pourrai soustraire années, mois, jours pour obtenir les différences.
Mais je n'y parviens pas.
Voici ma methode :
Code :
|
Ça me fait une erreur en ligne 13 : error: request for member 'tm_year' in 'currentD', which is of pointer type 'tm*' (maybe you meant to use '->' ?)|
Code :
|
Le & c'est pour accéder à l'adresse de currentDate ? Why ? Si je l'enlève j'ai une erreur en compilant.
Thank you for your help
Marsh Posté le 06-12-2016 à 21:38:29
Tu as fait: struct tm * currentD
Donc soit tu fais (*currentD).tm_year soit tu fais currentD->tm_year
A+,
Marsh Posté le 07-12-2016 à 09:13:23
ReplyMarsh Posté le 07-12-2016 à 10:44:33
Farian a écrit : Edit : Le fait que vous ne rencontriez le problème qu'à partir du 01/12/1969 me fait pensez que vous remplissez "mal" le champ "mois" de la structure tm, qui doit être entre 0 et 11 (alors que le jour est entre 1 et 31 |
Ah d'accord. Merci pour ces nouvelles infos. J'ai corrigé mon code et ça fonctionne
Marsh Posté le 07-12-2016 à 21:48:56
Lt Ripley a écrit : Merci gilou, ça fonctionne.
|
Oui, *currentD est un struct tm, donc currentD est un pointeur sur un struct tm.
A+,
Marsh Posté le 06-12-2016 à 10:40:38
Salut tout le monde
Je fais un autre petit programme, en parrallèle, pour m'entrainer.
Ce programme prend une date entrée par l'utilisateur et donne son âge en secondes, ou minutes, etc par exemple pour qq'un de 40 ans ca fait dans les 14 000 jours
Il fonctionne bien, sauf que si on entre une date égale ou inférieur au 1-12-1969 eh bien ça ne marche plus, le programme sort des zeros partout.
Voici ma
fonctionméthode qui récupère la date sur l'ordi et calcul la différence en secondes. Je l'ai trouvé ici : http://www.cplusplus.com/reference/ctime/time/Et je l'ai adaptée :
Merci pour votre aide !
Message édité par Lt Ripley le 06-12-2016 à 11:15:52