Ho una stringa contenente una data/ora locale e ho bisogno di convertirlo in un valore time_t (in UTC) - Ho cercato questo:Conversione stringa contenente localtime in UTC in 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);
ma il valore time_t che ottengo è il valore che mi aspetterei se la stringa venisse analizzata come ora UTC non locale. Forse ho frainteso cosa dovrebbe fare la durata massima, ma nel mio fuso orario (Regno Unito) il 1 ° settembre usiamo BST (cioè UTC + 1 ora), quindi mi aspetto che il valore alla fine sia di 1 ora prima di UTC .
C'è un modo per interpretare la stringa come ora locale, tenendo automaticamente conto dell'offset UTC che sarebbe stato in vigore in quella data? Nota che ho bisogno del valore time_t non di una struct tm, nell'esempio sopra voglio che il valore time_t corrisponda a 2009-09-01 01:00:00 GMT
grazie, ma il suo valore time_t che mi interessa - se faccio un mktime() sul 'localcal' struct nel tuo codice mi dà lo stesso risultato di mktime() su ' cal'. Ho bisogno di un modo per produrre un valore time_t equivalente a '2009-09-01 01:00 GMT' – codebox
La convenzione C è di memorizzare time_t come il numero di secondi dal 1970-01-01 in UTC. È cambiato in locale solo per l'interpretazione o la visualizzazione. Se desideri introdurre rob_t come variante locale, puoi calcolare il numero di secondi tra gmtime() e localtime() e aggiungerlo al tuo time_t. :) – Andomar
ok, ma voglio interpretare la stringa come ora locale, non produrre un equivalente locale di una stringa di tempo UTC. Nel nostro esempio, supponendo che viviamo in GMT + 1, la stringa "2009/09/01/00" è la nostra ora locale, quindi è equivalente a "2009/09/01/01" in GMT, quindi il codice dovrebbe restituire il valore time_t corrispondente a "2009/09/01/01". Ha senso? – codebox