[C] convertir une heure ISO 8601 en timestamp EN TENANT COMPTE DE LA TIME ZONE
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

[C] convertir une heure ISO 8601 en timestamp EN TENANT COMPTE DE LA TIME ZONE



  1. #1
    destroyedlolo

    [C] convertir une heure ISO 8601 en timestamp EN TENANT COMPTE DE LA TIME ZONE


    ------

    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 :

    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));
    ignore totalement la time zone (du coup, pas beaucoup d'interet surtout qu'en plus, la fonction n'est pas standard).

    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.

    -----
    Dernière modification par destroyedlolo ; 04/05/2022 à 16h11.

  2. #2
    destroyedlolo

    Re : [C] convertir une heure ISO 8601 en timestamp EN TENANT COMPTE DE LA TIME ZONE

    Bon, après pas mal de bidouilles, voila mon code qui fonctionne :

    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);
    		}
    	
    		long int offset = t.__tm_gmtoff;
    		if(debug)
    		  printf( "%4d-%02d-%02d %02d:%02d:%02d %6ld =>", 
    	        t.tm_year+1900, t.tm_mon+1, t.tm_mday,
           		t.tm_hour, t.tm_min, t.tm_sec, t.__tm_gmtoff
    		);
    
    		time_t ts = mktime( &t );
    
    			/* Add the offset took from the sample
    			 * minus the one from the current TZ.
    			 * t.__tm_gmtoff has been updated by mktime( &t );
    			 */
    		ts -= offset - t.__tm_gmtoff;
    		printf("%ld %s\n", ts, ctime(&ts));
    Mais il conserve quand meme quelques défauts :
    - strptime() qui n'est pas standard
    - les gesticulations avec __tm_gmtoff qui ne le sont pas plus et j'ai un peu peur qu'un jour, glibc change la façon dont il est mis a jour.

    Bref, toutes solutions moins bancale est la bien venue.

Discussions similaires

  1. probabilité en tenant compte du passé
    Par poolpool dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 13/06/2020, 15h51
  2. Convertir l'heure terrestre en heure martienne ?
    Par nana20 dans le forum Archives
    Réponses: 10
    Dernier message: 09/07/2018, 07h45
  3. Que choisir après mon Bac SI tenant compte de mes notes
    Par Mortufac dans le forum Orientation après le BAC
    Réponses: 5
    Dernier message: 30/10/2016, 05h57
  4. Réponses: 36
    Dernier message: 27/02/2014, 06h49
  5. Vitesse en tenant compte de la masse.
    Par invite7e1a77fa dans le forum Physique
    Réponses: 2
    Dernier message: 24/04/2010, 17h31