La conversion de chaîne de caractères contenant localtime en UTC, dans C

J'ai une chaîne contenant une date/heure et j'ai besoin de convertir un time_t valeur (en UTC) - j'ai essayé ceci:

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 time_t valeur je serai de retour est la valeur que j'allais attendre si la chaîne a été analysée comme UTC pas de temps local. J'ai peut-être mal compris ce que strptime est censé faire, mais dans mon fuseau horaire (royaume-UNI), le 1er septembre, nous sommes à l'aide de la BST (soit UTC + 1 heure) donc j'attendrais la valeur, je me retrouve avec 1 heure d'avance sur l'heure UTC.

Est-il un moyen d'interpréter la chaîne que localtime, en prenant automatiquement en compte le décalage UTC qui aurait été en vigueur à cette date? Notez que j'ai besoin de la time_t valeur pas une struct tm, dans l'exemple ci-dessus, je veux time_t valeur pour correspondre à 2009-09-01 01:00:00 GMT

OriginalL'auteur codebox | 2009-11-19