¿Cómo puede un programa de Windows cambiar temporalmente su zona horaria?

He escrito una función para devolver eltime_t valor correspondiente a la medianoche de un día determinado. Cuando no hay medianoche para un día determinado, devuelve la primera hora disponible; esa situación puede ocurrir, por ejemplo, cuando Egipto ingresa al horario de verano. Este año, el cambio de hora entra en vigencia a la medianoche de la noche del 29 de abril, por lo que el reloj pasa directamente de las 23:59 a la 01:00.

Ahora estoy escribiendo pruebas unitarias para esta función, y una de las pruebas debería replicar el escenario de Egipto. En Unix, puedo lograrlo así:

putenv("TZ", "Egypt", true);
tzset();

Después de hacer eso, más llamadas alocaltime comportarme como si estuvieran en Egipto en lugar de Minnesota, y mis pruebas pasan. Sin embargo, el simple hecho de configurar la variable de entorno no tiene ningún efecto en Windows. ¿Qué puedo hacer para que la prueba unitaria piense que está en otro lugar sin afectar el resto de los programas que se ejecutan en el sistema?

Respuestas a la pregunta(8)

Su respuesta a la pregunta