Differnce entre deux dates de type: DD/MM/YYYY hh:mm:ss:msms:µsµs

Signaler
Messages postés
5
Date d'inscription
mardi 5 avril 2005
Statut
Membre
Dernière intervention
31 décembre 2010
-
Messages postés
5
Date d'inscription
mardi 5 avril 2005
Statut
Membre
Dernière intervention
31 décembre 2010
-
Bonjour,

j'ai deux dates de type 14/05/2010 15:30:05:20:05 cad DD/MM/YYYY hh:mm:ss:msms:µsµs.
cette information date est enregistrer comme chaine de caractere dans un tableau parceque elle est charger a partir d'un fichier .txt

je veux savoir comment calculer la difference entre ces deux dates et la différence sera en ms ou bien en s.... suivant un choix donner par l'utilisateur
j'ai essayé de faire un programme mais ça marche pas: je vais laisser la partie millisecondes et microsecondes pour apres je vais essayé tt d'abord de faire marcher mon programme jusqu au seconde
le voila merci de me dire ou est le probleme:

Code :
#include <stdio.h>
#include <time.h>

int main()
{
struct tm1,tm2;
char buf1[255], buf2[255];
double diff;

strptime("2001-11-12 18:31:01", "%Y-%m-%d %H:%M:%S", &tm1);
strftime(buf1, sizeof(buf1), "%d %b %Y %H:%M", &tm1);
puts(buf);
strptime("2001-11-13 05:31:01", "%Y-%m-%d %H:%M:%S", &tm2);
strftime(buf2, sizeof(buf2), "%d %b %Y %H:%M", &tm2);
puts(buf);
time_t T1= mktime(tm * tim);
time_t T2 = mktime(tm * tim);
diff = T2 - T1;
printf("la difference en secondes est:%d",diff);



return 0;
}

7 réponses

Messages postés
14975
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 février 2021
94
Hello,
Plusieurs petite erreurs:
struct tm tm1,tm2;
// tu ne dis pas quelle struct
puts(buf);
// buf n'est pas connu
mktime(tm * tim); mktime(&tm1)
// tu copies le prototype, là... et tim n'est pas connu

Après, je ne suis pas sous Linux, donc je ne peux pas compiler (à cause de strptime)

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
Messages postés
14975
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
25 février 2021
94
Perso, je serais resté avec des char* et des coup de strtok() pour découper la chaine en morceaux

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
Messages postés
3840
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 février 2021
119
Je reconnais le code du man que tu as mal recopié :p

Ce ne sont que des erreurs de copier coller, pas de soucis particuliers, à part pour ton printf ou tu as mis %d pour un double. (%d et %i sont pour des entiers, d'ou le résultat incohérent).
La fonction strptime n'est absolument pas standard, et si tu as bien lu le man, il te faut ajouter un define avant time.h

#define _XOPEN_SOURCE

#include <stdio.h>
#include <time.h>

int main(void)
{
  struct tm tm1,tm2;
  char buf1[255], buf2[255];
  unsigned int diff;

  strptime("2001-11-12 18:31:01", "%Y-%m-%d %H:%M:%S", &tm1);
  strftime(buf1, sizeof(buf1), "%d %b %Y %H:%M", &tm1);
  puts(buf1);
  strptime("2001-11-13 05:31:01", "%Y-%m-%d %H:%M:%S", &tm2);
  strftime(buf2, sizeof(buf2), "%d %b %Y %H:%M", &tm2);
  puts(buf2);
  time_t t1 = mktime(&tm1);
  time_t t2 = mktime(&tm2);
  diff = t2 - t1;
  printf("La difference en secondes est: %u\n", diff);

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
5
Date d'inscription
mardi 5 avril 2005
Statut
Membre
Dernière intervention
31 décembre 2010

merci bien pour ta reponse, elle marche bien
maintenant je vais essayé d'effectué la difference en tenant compte des ms et des µs

merci de m'aider si je trouve probleme, je vais essayé de faire un programme pour cela
Messages postés
5
Date d'inscription
mardi 5 avril 2005
Statut
Membre
Dernière intervention
31 décembre 2010

je veux bien extraine la partie milliseconde et µs ms ça marche pas une deuxieme fois avec ce code:
#include
#include <stdlib.h>
#include
int main()
{
char m [20], texte[] = "2001-11-13 18:31:01:25:50";
int ms,micros, i = 0;

for (i=20; texte[i]!=':'; ++i)
{
// printf("%c", texte[i]);
m[i]=texte[i];
//pour convertir m[10] en nombre entier }

ms= atoi(m);

printf("\n");
printf ("%d", ms);

for (i=23; texte[i]!='\0'; ++i)
{
printf("%c", texte[i]);
m[i]=texte[i];

}
micros= atoi(m);
//printf ("%d ms et %d µs", ms, micros);*/

}

merci de me dire ou est l'erreur
Messages postés
3840
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 février 2021
119
Tu ne peux pas faire un atoi sur un début de tableau non initialisé !
Au mieux, il y a un 0 devant, et il te renvoie 0, au pire tu as une donnée aléatoire.

Une solution facile à ce problème (peut être pas la meilleur):
#include <stdlib.h>
#include 
#include <stdio.h>
#include <string.h>

int main(void)
{
  char m[21] = {0};
  char texte[] = "2001-11-13 18:31:01:25:50";
  int ms = 0;
  int i = 0;

  memset(m, '0', 20);
  printf("%s\n", m);

  for (i = 20; texte[i] != ':'; ++i)
    m[i] = texte[i];

  ms = atoi(m);
  printf("%s %i\n", m, ms);

  return 0;
}


PS: Attention, iostream c'est du C++, pas du C. Pense à prendre un compilateur C, et non C++. Tu risques d'avoir des surprises dans certains cas...

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
5
Date d'inscription
mardi 5 avril 2005
Statut
Membre
Dernière intervention
31 décembre 2010

merci bien je vais essayé de l'integrer a mon grand code.