Nombre de jours entre 2 dates

Nombre de jours entre 2 dates - C - Programmation

Marsh Posté le 14-05-2006 à 13:57:39    

Hello,
 
J'ai besoin de connaître le nombre de jours écoulés entre 2 dates (plus précisément entre la date du jour et une date fournie).
Existe t'il un fonction déjà prévue ou pas, dans quel cas, quelqu'un a t'il déjà fais l'algo histoire de ne pas perdre du temps à tout refaire.
 
Merci.

Reply

Marsh Posté le 14-05-2006 à 13:57:39   

Reply

Marsh Posté le 14-05-2006 à 15:27:30    

cinezone a écrit :

Hello,
 
J'ai besoin de connaître le nombre de jours écoulés entre 2 dates (plus précisément entre la date du jour et une date fournie).
Existe t'il un fonction déjà prévue ou pas, dans quel cas, quelqu'un a t'il déjà fais l'algo histoire de ne pas perdre du temps à tout refaire.
 
Merci.


 
Il n'existe rien à ma connaissance mais l'algo est facile
 
Tu peux envisager la boucle
TQ (jj < jjfin ou mm < mmfin ou aa < aafin)
FAIRE
      jj=jj+1
      if (date_incorrect(jj, mm, aa))
      {
           jj=1;
           if (mm < 12)
                mm=mm + 1;
           else
           {
                mm=1;
                aa=aa + 1;
           }
      }
FIN FAIRE
Et implémenter "date_incorrect" pour vérifier ta date (bissextile, plus de 31 jours, etc)
 
Ou bien utiliser la fonction de mktime pour convertir la date de départ et d'arrivée en secondes puis faire nbJour=(secFin - secDeb)  / 86400


Message édité par Sve@r le 14-05-2006 à 15:31:20

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

Marsh Posté le 14-05-2006 à 16:53:50    

J'ai utilisé la fonction difftime(today, date) / (24*60*60) et ça fonctionne parfaitement.
 
Merci quand même pour le temps que tu as passé à me répondre.

Reply

Marsh Posté le 14-05-2006 à 18:15:36    

cinezone a écrit :

J'ai utilisé la fonction difftime(today, date) / (24*60*60) et ça fonctionne parfaitement.


Ben en fait, difftime() prend comme paramètres des dates en secondes. Si tu les as déjà, c'est ok sinon t'es quand-même obligé de passer par une fonction qui converti une date jj/mm/aa en secondes => mktime().
 
une fois ces secondes obtenues, soit tu fais

  • nbJour=difftime(today, date) / 86400
  • nbJour=(today - date) / 86400

;)  ;)  ;)  
Bon, l'avantage en utilisant difftime(), c'est que c'est portable. Si demain l'implémentation de time_t change, t'auras rien à faire avec difftime()
 

cinezone a écrit :

Merci quand même pour le temps que tu as passé à me répondre.


NP  :sol:


Message édité par Sve@r le 14-05-2006 à 18:23:24

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

Marsh Posté le 14-05-2006 à 22:36:41    

cinezone a écrit :

J'ai besoin de connaître le nombre de jours écoulés entre 2 dates (plus précisément entre la date du jour et une date fournie).


difftime()

Message cité 1 fois
Message édité par Emmanuel Delahaye le 14-05-2006 à 22:37:30

---------------
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 15-05-2006 à 09:32:52    


Ah ? Vraiment ???  
Tu es arrivé pile-poil comme la cavalerie... après la bataille :D


Message édité par Sve@r le 15-05-2006 à 09:34:04

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

Marsh Posté le 15-05-2006 à 11:09:27    

la bataille n'est pas finie, vous faites comment avec difftime si vos dates ne sont pas entre 1970 et 2038  :lol:

Reply

Marsh Posté le 16-05-2006 à 19:56:58    

skelter a écrit :

la bataille n'est pas finie, vous faites comment avec difftime si vos dates ne sont pas entre 1970 et 2038  :lol:


Ben mon algo initial fonctionne... :bounce:  

Reply

Marsh Posté le 16-05-2006 à 20:48:33    

Sve@r a écrit :

Ben mon algo initial fonctionne... :bounce:


 
peut etre mais il est peu efficace, le mieux est de convertir directement les 2 dates en jours depuis un temps de reference
c'est pas un probleme si simple que ca, faudrais voir si il n'y a pas une bibliothèque spécialisée

Reply

Marsh Posté le 17-05-2006 à 12:57:49    

skelter a écrit :

peut etre mais il est peu efficace, le mieux est de convertir directement les 2 dates en jours depuis un temps de reference
c'est pas un probleme si simple que ca, faudrais voir si il n'y a pas une bibliothèque spécialisée


Code :
  1. //---------------------------------------------------------------------------
  2. double Julien(int an, int ms, int jr)
  3. {
  4.   // Returne le nombre de jours Juliens
  5.   double jd;
  6.   jd = (1461 * (an + 4800 + (ms -14) / 12)) / 4;
  7.   jd += (367 * (ms - 2 - 12 * ((ms - 14) / 12))) / 12;
  8.   jd -= (3 * ((an + 4900 + (ms - 14) / 12) / 100)) / 4;
  9.   jd += jr;
  10.   return jd;
  11. }
  12. //---------------------------------------------------------------------------
  13. /*
  14. double Julian(int year,int month,double day)
  15. {
  16.   // Returns the number of julian days for the specified day.
  17.     int a,b,c,e;
  18.     if (month < 3) {
  19. year--;
  20. month += 12;
  21.     }
  22.     if (year > 1582 || (year == 1582 && month>10) ||
  23. (year == 1582 && month==10 && day > 15)) {
  24. a=year/100;
  25. b=2-a+a/4;
  26.     }
  27.     c = 365.25*year;
  28.     e = 30.6001*(month+1);
  29.     return b+c+e+day+1720994.5;
  30. }
  31. */
  32. //---------------------------------------------------------------------------


    Je ne sais pas s'il y a une bibliothèque qui permette le calcul du nombre de jours à partir d'une date donnée. Mais le jour Julien( Julian day ) est utilisé par les astronomes pour leurs calculs. C'est le nombre de jours depuis une date correspondant à des périodes lunaires et solaire qui se situe en l'an 4712 avant notre ère. J'ai trouvé ces deux algorythmes lors de recherches sur les phases lunaires.Voir ici


Message édité par videaste95 le 17-05-2006 à 13:29:24
Reply

Sujets relatifs:

Leave a Replay

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