View previous topic :: View next topic |
Author |
Message |
laurent_fait_du_bateau n00b
Joined: 18 May 2004 Posts: 38
|
Posted: Mon May 31, 2004 6:06 pm Post subject: [CODE:Eiffel] Convertion de date |
|
|
Bonjour,
J'ai un problème car je dois récupérer la date de création des fichiers qui
est inscrit en seconde sur le hardware et pouvoir la transformer en date concrète
sec min heure jour mois année
Si quelqu un peu m'aider, j'ai trouver l'opération inverse dans une librairie c :
static inline unsigned long
mktime (unsigned int year, unsigned int mon,
unsigned int day, unsigned int hour,
unsigned int min, unsigned int sec)
{
if (0 >= (int) (mon -= 2)) { /* 1..12 -> 11,12,1..10 */
mon += 12; /* Puts Feb last since it has leap day */
year -= 1;
}
return (((
(unsigned long) (year/4 - year/100 + year/400 + 367*mon/12 + day) +
year*365 - 719499
)*24 + hour /* now have hours */
)*60 + min /* now have minutes */
)*60 + sec; /* finally seconds */
}
Last edited by laurent_fait_du_bateau on Tue Jun 01, 2004 5:55 am; edited 1 time in total |
|
Back to top |
|
|
avendesora Veteran
Joined: 16 Aug 2002 Posts: 1739 Location: Betelgeuse vicinity
|
Posted: Mon May 31, 2004 6:38 pm Post subject: |
|
|
Note: merci de modifier le titre de ce thread. Pas besoin de crier,
et essaye de t'adapter au format des titres préconisés (voir le premier sticky)
(fonction POSIX standard)
Je pense que ca doit pouvoir te servir. |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Mon May 31, 2004 6:39 pm Post subject: |
|
|
va voir du côté de la structure stat (sys/stat.h)
et time.h
créer une strcture tm (déclarée dans time.h)
il y a trois identificateurs temps dans la structure stat
st_atime
st_mtime
st_ctime
amuses toi avec en prenant ta_struct_tm = localtime(un_de_ces_3_identificateurs)
et après prend l'info qui t'interesses dans la structure tm résultante
tm_sec
tm_min
tm_hour
ce que tu veux...
tu peus aussi utiliser directement asctime(ta_struct_tm)
qui te filera une belle chaîne de caractères avec tout dedans préformatée et tout
[EDIT] amha j'ai été trop long à répondre |
|
Back to top |
|
|
avendesora Veteran
Joined: 16 Aug 2002 Posts: 1739 Location: Betelgeuse vicinity
|
Posted: Mon May 31, 2004 6:42 pm Post subject: |
|
|
kwenspc wrote: |
[EDIT] amha j'ai été trop long à répondre |
Mais t'es beaucoup plus précis! |
|
Back to top |
|
|
laurent_fait_du_bateau n00b
Joined: 18 May 2004 Posts: 38
|
Posted: Mon May 31, 2004 6:42 pm Post subject: |
|
|
c'est pas ca le probleme, avoir une structure de date mais c'est de convertir les secondes en s m h j mois année
exemple :
je lit sur la disquette dans l'inode du fichier l'info
access time: 960408513 et moi j'aimerais obtenir 7 juin 2000 22h08 33 sec |
|
Back to top |
|
|
avendesora Veteran
Joined: 16 Aug 2002 Posts: 1739 Location: Betelgeuse vicinity
|
Posted: Mon May 31, 2004 6:45 pm Post subject: |
|
|
Tu devrais relire le post de kwenspc avec un peu plus d'attention. C'est exactement ce qu'il te propose. |
|
Back to top |
|
|
laurent_fait_du_bateau n00b
Joined: 18 May 2004 Posts: 38
|
Posted: Mon May 31, 2004 6:47 pm Post subject: |
|
|
Petit problème je ne travail pas avec du c mais en eiffel et je n'ai pas trops utiliser les
conversion de pointer de c a eiffel |
|
Back to top |
|
|
DuF Advocate
Joined: 09 Dec 2002 Posts: 2687 Location: Paris
|
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Mon May 31, 2004 7:08 pm Post subject: |
|
|
rah tss l'autre eh c'est maintenant que tu nous dis que tu fais de l'effeil...
ben ecoute là je vois pas moi c'est C-pour-la-vie
nan serieux : il doit y avoir moyen, bon sinon regardes le fonctionnement de la fonction que tu as trouvé tu la vois faire une conversion dans l'autre sens...
et bien qu'a cela ne tienne : tu fais l'inverse.
(m'étonnerait que ça existe pas déjà m'enfin...)
le temps donné en seconde et celui écoulé depuis le 1er janvier 1970
c pas trop compliqué de faire l'inverse a priori...
tu fais 1 division sur une année de secondes, tu ne prends que ce qu'il y a à droite de la virgule que tu gardes.
tu remultiplie ce meme chiffre par une année en seconde et tu soustrait le résultat aux secondes de départ...
tu vois le cheminement?
bon ben tu continus ensuite pour savoir combien de mois sont passé sur le reste, ensuite combien de jours, combien d'heures et le reste c tes secondes
après pour avoir ça en calendrier hum essais de voir des algos sur des calendriers perpetuels...
mais je pense que tu devrais directement essayé de poser la question à des peronnes qui touche à effeil...parce qu'une fonction qui fait ça c'est certain qu'elle existe déjà.
(et pi ajoute un [OFF] à ton titre de thread parce que là on est pas très proche de gentoo en fait) |
|
Back to top |
|
|
avendesora Veteran
Joined: 16 Aug 2002 Posts: 1739 Location: Betelgeuse vicinity
|
Posted: Mon May 31, 2004 7:15 pm Post subject: |
|
|
L'important, c'est de pas se louper sur les années bisextiles |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Mon May 31, 2004 7:17 pm Post subject: |
|
|
oui justement je me suis arreter dans mon raisonnement parce que j'avais la flemme de résoudre le pb |
|
Back to top |
|
|
TGL Bodhisattva
Joined: 02 Jun 2002 Posts: 1978 Location: Rennes, France
|
Posted: Mon May 31, 2004 10:00 pm Post subject: |
|
|
Réécrire ça alors que ça a été fait mille fois me semble être une mauvaise idée (ne serait ce que pour le principe de flemme, qui doit être défendu à tout prix en toutes circonstances).
Faire un appel vers un bout de libc (cf. le time.h comme conseillé déjà) n'est pas si compliqué, enfin moi ça me semble être aussi une solution raisonnable.
Sinon, si tu utilises SmartEiffel, tu dois pouvoir t'en tirer très simplement avec la classe TIME :
http://smarteiffel.loria.fr/libraries/time.html
(par exemple : tu crées une instance sur le "1 janvier 1970 à 00h00", tu lui ajoutes ton paquet de secondes, et tu as ta date toute prête. Il y a aussi des classes filles pour la localisation de la date en français ou autre.)
Ou mieux encore, tu dois pouvoir récupérer la librairie du projet Gobo Eiffel, qui semble un peu plus complète et gère le temps Unix comme une grande :
http://www.gobosoft.com/eiffel/gobo/time/absolute.html
Et effectivement, une petite édition du titre s'impose. Je ne suis qu'à moitié pour une balise "[Off]", parceque la plupart des off sont encore plus off que ça. Pourquoi ne pas instaurer une balise "[Code]", et ses déclinaisons "[Code: langage]", pour les discussion de programmation ? Ça donnerait ici : «[Code: Eiffel] Conversion de dates», ou un truc du genre. |
|
Back to top |
|
|
laurent_fait_du_bateau n00b
Joined: 18 May 2004 Posts: 38
|
Posted: Tue Jun 01, 2004 5:49 am Post subject: [CODE:Eiffel] convertion de date |
|
|
laurent_fait_du_bateau wrote: | Bonjour,
J'ai un problème car je dois récupérer la date de création des fichiers qui
est inscrit en seconde sur le hardware et pouvoir la transformer en date concrète
sec min heure jour mois année
Si quelqu un peu m'aider, j'ai trouver l'opération inverse dans une librairie c :
static inline unsigned long
mktime (unsigned int year, unsigned int mon,
unsigned int day, unsigned int hour,
unsigned int min, unsigned int sec)
{
if (0 >= (int) (mon -= 2)) { /* 1..12 -> 11,12,1..10 */
mon += 12; /* Puts Feb last since it has leap day */
year -= 1;
}
return (((
(unsigned long) (year/4 - year/100 + year/400 + 367*mon/12 + day) +
year*365 - 719499
)*24 + hour /* now have hours */
)*60 + min /* now have minutes */
)*60 + sec; /* finally seconds */
} |
|
|
Back to top |
|
|
laurent_fait_du_bateau n00b
Joined: 18 May 2004 Posts: 38
|
Posted: Tue Jun 01, 2004 6:03 am Post subject: excuse |
|
|
voila j'ai corriger le titre selon vos conventions, je n'avais pas fait toute suite attention
au standart et je m'en excuse
Je vais essayer la proposition de partir depuis la date en eiffel de 1970 et d'ajouter les secondes ca me parait une bonne idée, sinon j'essayerais de faire appel à la méthode c, bon coté c je n'ai pas trouvé la méthode qui me convertit les secondes en date dans time.h
et faire l'inverse me semblait aussi facile, en faite j'ai réussi à remonter jusqu'au jour et après le calcul se complexifie. En plus il y a chose étonnante une erreur de 2 heures en convertissant 960408513 sec
moi j'obtient : 20h 8 min 33 sec
et il faudrait apparement d'après le fichier linux: 22h 8 min 33 sec
mais bon ceci n'est qu'un détail de plus..... |
|
Back to top |
|
|
Leander256 l33t
Joined: 05 Jul 2003 Posts: 910 Location: Singapour
|
Posted: Tue Jun 01, 2004 8:57 am Post subject: Re: excuse |
|
|
laurent_fait_du_bateau wrote: | moi j'obtient : 20h 8 min 33 sec
et il faudrait apparement d'après le fichier linux: 22h 8 min 33 sec
|
C'est peut-être un petit problème entre le temps universel et le temps local, en effet c'est l'été en France et on est en GMT+2, et peut-être que le système stocke les dates en GMT? |
|
Back to top |
|
|
|