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