Я написал функцию, которая возвращает значение time_t
, соответствующее полуночи данного дня. Если для данного дня нет полуночи, он возвращает самое раннее доступное время; такая ситуация может возникнуть, например, когда в Египте наступает переход на летнее время. В этом году изменение времени вступает в силу в полночь ночи 29 апреля, поэтому часы идут с 23:59 до 01:00.
Сейчас я пишу модульные тесты для этой функции, и один из тестов должен повторить сценарий Египта. В Unix я могу сделать это так:
putenv("TZ", "Egypt", true);
tzset();
После этого дальнейшие звонки на localtime
ведут себя так, как будто они в Египте, а не в Миннесоте, и мои тесты проходят. Однако простая установка переменной среды не оказывает никакого влияния на Windows. Что я могу сделать, чтобы заставить модульный тест думать, что он где-то еще, не затрагивая остальные программы, работающие в системе?