J'ai une chaîne contenant une date/heure locale et je dois le convertir en une valeur time_t (UTC) - J'ai essayé ceci:Conversion chaîne contenant localtime en UTC en C
char* date = "2009/09/01/00";
struct tm cal = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL};
strptime(date, "%Y/%m/%d/%H", &cal);
time_t t = mktime(&cal);
mais la valeur time_t que je récupère est la valeur à laquelle je m'attendrais si la chaîne était analysée en UTC et non en heure locale. Peut-être que j'ai mal compris ce que strptime est censé faire, mais dans mon fuseau horaire (UK) le 1er septembre nous utilisons BST (ie UTC + 1 heure) donc je m'attendrais à ce que la valeur que je reçois soit 1 heure d'avance sur UTC .
Existe-t-il un moyen d'interpréter la chaîne comme locale, en tenant automatiquement compte du décalage UTC qui aurait été en vigueur à cette date? Notez que j'ai besoin de la valeur time_t pas une struct tm, dans l'exemple ci-dessus je veux que la valeur time_t correspond à 2009-09-01 01:00:00 GMT
grâce, mais sa valeur time_t que je suis intéressé par - si je fais un mktime() sur le « localcal » struct dans votre code il me donne le même résultat que faire mktime() sur ' cal '. J'ai besoin d'un moyen de produire une valeur time_t équivalente à '2009-09-01 01:00 GMT' – codebox
La convention C est de stocker time_t en tant que nombre de secondes depuis 1970-01-01 en UTC. Il a été changé en heure locale uniquement pour l'interprétation ou l'affichage. Si vous souhaitez présenter rob_t comme variante locale, vous pouvez calculer le nombre de secondes entre gmtime() et localtime() et l'ajouter à votre time_t. :) – Andomar
ok, mais je veux interpréter la chaîne comme heure locale, ne pas produire un équivalent en temps local d'une chaîne de temps UTC. Dans notre exemple, en supposant que nous vivons en GMT + 1, la chaîne "2009/09/01/00" est notre heure locale, et donc elle est équivalente à "2009/09/01/01" en GMT, et donc le le code doit renvoyer la valeur time_t correspondant à "2009/09/01/01". Cela a-t-il du sens? – codebox