Puede usar gmtime() y la estructura tm para establecerlo directamente, siempre que conozca los desplazamientos.
Si conoce su hora local y UTC, conoce su desplazamiento local. Siempre que conozca el desplazamiento del objetivo, solo es cuestión de establecer tm_hour (y, potencialmente, voltear el día, si va al < 0 o> 23).
Para obtener un código de muestra, consulte este gmtime reference page. Muestra compensaciones basadas en offsets de zona horaria.
Editar:
En respuesta a los comentarios - Se puede también dejar que mktime manejar el cambio para usted, que le permite simplificar esto convirtiendo de nuevo a un time_t. Se puede usar algo como:
time_t currentTime;
tm * ptm;
time (¤tTime);
ptm = gmtime (&rawtime);
ptm->tm_hour += hours_to_shift;
ptm->tm_minutes += minutes_to_shift; // Handle .5 hr timezones this way
time_t shiftedTime = mktime(ptm);
// If you want to go back to a tm structure:
tm * pShiftedTm = gmtime(&shiftedTime);
Esto parece estar funcionando bien. Voy a usar local_tm-> tm_sec + = 3600; other_t = mktime (local_tm); en cambio, deje que mktime haga todo lo de normalización para mí. – verma
Sí, eso debería funcionar también - Intenté ser educado y evitar escribir en la memoria de otra persona, ya que la memoria apuntada por local_tm en este ejemplo no pertenece a mi código. –
Eso es un buen punto. – verma