7
votes

Comment dois-je stocker un horodatage Time_T à un fichier en utilisant c?

Pour un petit programme de TODO que j'écris, j'ai des horodatages qui sont de cette forme xxx

et sont enregistrés chaque fois qu'une tâche est entrée pour indiquer l'heure à laquelle il a été saisi.

Je veux stocker les tâches dans un fichier texte brut, de sorte que l'état puisse être enregistré et restauré. Comment dois-je stocker les horodatages dans le fichier texte et comment puis-je les récupérer dans mon programme après avoir lu le fichier texte?


0 commentaires

3 Réponses :


1
votes

Si cela ne vous dérange pas un peu d'hypothèses non conportées, juste lancer time_t à long ( long long si vous avez un compilateur C99 ), écrivez la valeur LONG , lisez la valeur et rétablissez sur TIME_T .

La norme ne garantit aucune garantie qu'un time_t est même représentable comme long: il ne dit que time_t est un type arithmétique, mais l'astuce ci-dessus devrait fonctionner pour tous les saines. Systèmes: -)


0 commentaires

3
votes

Le mode portable utilise la fonction diff terne . Calculez le TIME_T pour une époque choisie à l'aide de mktime , puis utilisez diff terrime pour calculer la différence en secondes. Pour convertir en arrière, vous pouvez commencer par l'époque en tant que struct tm et ajouter le nombre de secondes à tm_sec , puis appelez mktime pour obtenir un time_t .

Le mode Sane est d'assumer Time_t est représenté sous forme secondes depuis l'époque UNIX (1970-01-01 00:00 GMT) et convertir en un grand type entier. ( long long est le meilleur) pour l'imprimer. POSIX nécessite TIME_T SECONDES DE SECONDES ÉPOCH, et sur tout système SANE SANED.


1 commentaires

J'ai fait la première de vos suggestions, car je dois faire face au compilateur croisé et aux considérations de plateformes croisées.



14
votes

Convertir le time_t à struct tm à l'aide de gmtime () , puis convertir le struct tm en texte brut (de préférence le format ISO 8601) en utilisant StrfTime () . Le résultat sera portable, lisible par l'homme et lisible à la machine.

Pour revenir au Time_t , vous faites simplement l'analyse de la chaîne dans un struct TM et utilisez < Code> mktime () .

pour référence:


2 commentaires

@simplebob: Il n'y a que trois appels de fonction et ils sont tous bien documentés aux liens fournis. Avez-vous essayé d'utiliser les utiliser? Avez-vous rencontré des problèmes spécifiques?


Je me demandais simplement comment obtenir le codé à Time_T après avoir utilisé StrfTime () . Mais j'ai trouvé STRIPTIME déjà. Merci!