Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#1 Le 09/07/2013, à 17:01

boutor

[résolu] C++ - Temps issu d'un fichier texte

Salut à tous,

Je lis des dates dans un fichier texte.
Le FORMAT est : 2013-06-05T12:52:06Z.
Je ne sais pas ce que veulent dire T et Z, mais bon ce n'est pas grave car 2013-06-05 à 12:52:06, ça me va!

Par contre, je n'ai aucune idée de la manière de faire pour transformer ce texte lu en une date qui soit un chiffre (genre le nombre de secondes depuis le 01-01-1970) et avec laquelle, je puisse faire des calculs.

Je suis infructueux sur les moteurs de recherche avec les quels je n'obtiens que la possibilité d'obtenir la date du PC.

Merci

Dernière modification par boutor (Le 09/07/2013, à 19:28)

Hors ligne

#2 Le 09/07/2013, à 17:30

Madeba

Re : [résolu] C++ - Temps issu d'un fichier texte

Tu peux sans doute utiliser une fonction de conversion de chaine vers numérique, ou à la limite tu balayes la chaîne de caractère et tu fais la conversion toi même si le format ne change pas entre les dates. Les 10 premiers caractères te donnent le jour, derrière le T tu as l'heure.
Une fois que tu as extrait la date de ta chaîne, tu as des fonctions de conversion vers les tampons unix et vice versa (google ctime mktime asctime gmtime localtime etc.)

Hors ligne

#3 Le 09/07/2013, à 17:57

MicP

Re : [résolu] C++ - Temps issu d'un fichier texte

Bonjour
Pour le "T" et le "Z", il faudrait connaître le programme qui a créé ce fichier texte ?
Mais ça ressemble aux paramètres de la commande "date" pour l'heure (T) et le fuseaux horaire (Z)

Pour le nombre de secondes écoulées entre 01/01/1970 et une date donnée :

michel@stud:~$ date --date '2013-06-05 12:52:06' +%s
1370429526

ATTENTION: Année-Mois-Jour => 5 juin 2013

A voir :
man date
info coreutils 'date invocation'

Dernière modification par MicP (Le 09/07/2013, à 18:04)

Hors ligne

#4 Le 09/07/2013, à 18:01

boutor

Re : [résolu] C++ - Temps issu d'un fichier texte

Oui il doit y avoir l'information de fuseau horaire.

boutor@Pegase:date --date 2013-06-05T12:52:06Z 
mercredi 5 juin 2013, 14:52:06 (UTC+0200)
boutor@Pegase:date --date 2013-06-05T12:52:06Z +%s
1370436726

Merci pour les tuyaux...

Hors ligne

#5 Le 09/07/2013, à 18:08

MicP

Re : [résolu] C++ - Temps issu d'un fichier texte

smile Cool ! même pas besoin de s'embêter à enlever le T et le Z et d'encadrer le tout avec les '.... smile
J'avais pas essayé.
Merci pour le tuyau en retour.

Dernière modification par MicP (Le 09/07/2013, à 18:08)

Hors ligne

#6 Le 09/07/2013, à 18:20

Braun

Re : [résolu] C++ - Temps issu d'un fichier texte

Bonjour,
Si comme l'indique le titre il s'agit de C++, tu devrais trouver ton bonheur dans les bibliothèques ad hoc, e.g. time.h

Hors ligne

#7 Le 09/07/2013, à 19:27

boutor

Re : [résolu] C++ - Temps issu d'un fichier texte

Bon j'ai fait comme ça :

Une fonction qui me retourne un struct tm * avec lequel j'ai bidouillé ma date en std::string. Je ne prends pas en compte le fuseau horaire du coup.

struct tm * Get_Time(std::string date) {
    /*const char * weekday[] = { "Sunday", "Monday",
                             "Tuesday", "Wednesday",
                             "Thursday", "Friday", "Saturday"}; */
    struct tm * timeinfo;
    time_t rawtime;
    time ( &rawtime );
    timeinfo = localtime ( &rawtime );
    std::string dt;
    dt= date.substr(0,4);
    timeinfo->tm_year = atoi(dt.c_str()) - 1900;
    dt = date.substr(5,2);
    timeinfo->tm_mon = atoi(dt.c_str()) - 1;
    dt = date.substr(8,2);
    timeinfo->tm_mday = atoi(dt.c_str());
    dt = date.substr(11,2);
    timeinfo->tm_hour = atoi(dt.c_str());
    dt = date.substr(14,2);
    timeinfo->tm_min = atoi(dt.c_str());
    dt = date.substr(17,2);
    timeinfo->tm_sec = atoi(dt.c_str());
    mktime ( timeinfo );
   // printf ("That day is a %s.\n", weekday[timeinfo->tm_wday]);

    return timeinfo;
}

Et je récupère le int comme suit :

struct tm * timeinfo = Get_Time("2013-06-05T12:52:06Z");
int time = mktime(timeinfo);

Je n'aime pas trop atoi(.c_str()). Il doit y avoir plus élégant.

Hors ligne

#8 Le 09/07/2013, à 19:42

lann

Re : [résolu] C++ - Temps issu d'un fichier texte

Si tu as la bibliothèque gtk ou gtkmm, Glib::TimeVal et Glib::DateTime te font déjà tout ça.
Tu n'as qu'à passer la date au format 2013-06-05T12:52:06Z et ça suffit

Hors ligne

Haut de page ↑