que tienen una cadena que contiene una fecha/hora local y tengo que convertirlo en un valor time_t (en UTC) - He estado tratando de esto:conversión de cadena que contiene hora local 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);
pero el valor time_t que obtengo es el valor que esperaría si la cadena se analizara como UTC, no la hora local. Tal vez no entendí lo que se supone que debe hacer strptime, pero en mi zona horaria (Reino Unido) el 1 de septiembre estamos usando BST (es decir, UTC + 1 hora), así que esperaría que el valor final sea de 1 hora por delante de UTC .
¿Hay alguna manera de interpretar la cadena como localtime, teniendo en cuenta automáticamente el desplazamiento UTC que habría estado en vigencia en esa fecha? Tenga en cuenta que necesito el valor time_t no una struct tm, en el ejemplo anterior quiero que el valor time_t corresponda a 2009-09-01 01:00:00 GMT
gracias, pero su valor time_t que me interesa - si hago un mktime() en el 'localcal' struct en tu código me da el mismo resultado que hacer mktime() en ' California'. Necesito alguna manera de producir un valor time_t equivalente a '2009-09-01 01:00 GMT' – codebox
La convención C es almacenar time_t como el número de segundos desde 1970-01-01 en UTC. Lo ha cambiado a localtime solo para interpretación o visualización. Si desea introducir rob_t como la variante de tiempo local, puede calcular el número de segundos entre gmtime() y localtime() y agregarlo a su time_t. :) – Andomar
bien, pero quiero interpretar la cadena como hora local, no producir un equivalente de hora local de una cadena de tiempo UTC. En nuestro ejemplo, suponiendo que vivamos en GMT + 1, la cadena "2009/09/01/00" es nuestra hora local, por lo que es equivalente a "2009/09/01/01" en GMT, por lo que el el código debe devolver el valor time_t correspondiente a "2009/09/01/01". ¿Tiene sentido? – codebox