Bonjour à tous,
Un problème qui me rend chèvre !
J'essaie de convertir une heure ISO 8601 donc ressemblant à "2022-04-09T13:16:18+02:00" en time_t en UTC.
Alors si la conversion se passe bien, jamais au grand jamais la time zone n'est pris en compte.
Je m'explique :
ignore totalement la time zone (du coup, pas beaucoup d'interet surtout qu'en plus, la fonction n'est pas standard).Code:struct tm t; memset(&t, 0, sizeof(struct tm)); if(!strptime(buff, "<time>%FT%T%z", &t)){ puts("*E* can't read time"); exit(EXIT_FAILURE); } if(debug) printf( "%4d-%02d-%02d %02d:%02d:%02d", t.tm_year+1900, t.tm_mon+1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec ); t.tm_isdst = -1; /* let's glibc determine if we are in DST or not */ time_t ts = mktime( &t ); printf("-> %s\n", ctime(&ts));
Ainsi
"2022-04-09T13:16:18+02:00" me renvoie "2022-04-09 13:16:18-> Sat Apr 9 13:16:18 2022"
et
"2022-04-09T13:16:22+03:00" me renvoie "2022-04-09 13:16:22-> Sat Apr 9 13:16:22 2022"
J'ai essayé d'utiliser gmtime() ... mais il ne prend en compte que la timezone du systeme et non celle de la chaine.
Alors j'ai aussi tenter de bidouiller à la main en soustrayant l'offset de ma TZ actuelle au résultat de localtime() et en ajoutant celle indiquée dans la chaine ... mais ca tient de la bidouille et j'ai peur d'avoir des problèmes lors des changement d'heure DST.
Bref, si quelqu'un avait une idée lumineuse, il gagnerait toute ma considération
Merci
Laurent
ps: pourquoi ? Parce que j'essaie de faire correspondre les infos issues de l'application de suivi sportif de mon téléphone utilisant se format avec les données issue de ma GoPro qui sont elles en UTC. Ca donne des incrustations comme sur cette vidéo cette vidéo.
Les 2 synchronisées me permettrait d'avoir la même chose en ski de rando ou évidemment, on ne filme pas toute la montée.
-----