Sujet : Re: Problème de temps
De : JKB (at) *nospam* hilbert.invalid (JKB)
Groupes : fr.comp.lang.cDate : 05. May 2026, 22:49:34
Autres entêtes
Organisation : NUO - News.Usenet.Ovh
Message-ID : <slrn10vkpfe.g7m.JKB@hilbert.systella.fr>
References : 1 2
User-Agent : slrn/1.0.3 (Linux)
Le 05-05-2026, tTh <
tth@none.invalid> a écrit :
On 5/5/26 11:52, JKB wrote:
Bonjour à tous,
>
Bonsoir à toi Joel. Comment va ton camion ?
Bonsoir Thierry.
Toujours chez ce fichu carrossier !
>
gettimeofday(&horodatage, NULL);
t = time(NULL);
horodatage.tv_sec += (time_t) difftime(mktime(gmtime_r(&t, &tm1)),
mktime(localtime_r(&t, &tm2)));
Sauf que ça ne fonctionne pas comme attendu.
>
Alors, d'un lointain souvenir sur ce genre de truc, c'est
peut-être un enchainement de macros (tu sais, ces #define
fourbes et chafouins) qui font nawak. Peut-être décomposer
ton operation en plusieurs étapes pourrait corriger ton
problème. Just my milli€ :)
J'ai décomposé les opérations dans un fichier de test :
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void
disp_tm(struct tm *tm)
{
printf("%d %s\n", tm->tm_isdst, tm->tm_zone);
}
int
main()
{
time_t t;
struct tm *tm;
t = time(NULL);
printf("time=%lld\n", t);
printf("gmt=%lld\n", mktime(tm = gmtime(&t)));
disp_tm(tm);
printf("local=%lld\n", mktime(tm = localtime(&t)));
disp_tm(tm);
printf("diff=%lld\n", mktime(localtime(&t)) - mktime(gmtime(&t)));
exit(0);
}
Même résultat.
En revanche, je suis tombé sur quelqu'un qui disait qu'il fallait
traiter le cas de l'heure d'été à part. J'ai donc mis ceci dans mon
code :
gettimeofday(&horodatage, NULL);
t = time(NULL);
horodatage.tv_sec += (time_t) difftime(mktime(gmtime_r(&t, &tm1)),
mktime(localtime_r(&t, &tm2)));
if (tm2.tm_isdst != 0)
{
horodatage.tv_sec -= 3600;
}
Mais ça me semble scabreux. Pourquoi localtime_r renvoie-t-il CEST
en oubliant le CEST dans la conversion ?
JB
-- Si votre demande me parvient en code 29, je vous titiouillerai volontiersune réponse.
Haut de la page
Les messages affichés proviennent d'usenet.
NewsPortal