Я записал функцию для возврата time_t
значение, соответствующее полуночи в данный день. Когда нет никакой полуночи в течение данного дня, это возвращает самое раннее доступное время; та ситуация может произойти, например, когда Египет вводит летнее время. В этом году изменение времени вступает в силу в полночь ночью от 29 апреля, таким образом, часы идут непосредственно с 23:59 до 1:00.
Теперь я пишу модульные тесты на эту функцию, и один из тестов должен копировать сценарий Египта. В Unix я могу выполнить его как это:
putenv("TZ", "Egypt", true);
tzset();
После выполнения этого, дальнейших вызовов к localtime
ведите себя, как будто они находятся в Египте вместо Миннесоты и моей тестовой передачи. Установка Merely переменная среды не имеет никакого эффекта на Windows, все же. Что я могу сделать, чтобы заставить модульный тест думать, что это где-то в другом месте, не влияя на остальную часть программ, работающих на системе?
Я использовал setlocale (LC_ALL, "deu_aut")
, чтобы переключить настройки языка / страны на Австрию - заявлено в locale .h
. К сожалению, я не нашел строки языка / страны для Египта, но, возможно, это дает вам подсказку.
Вы видели функцию Win32 API SetTimeZoneInformation ?
У меня точно такое же требование:
-> некоторые процессы должны быть привязаны к UTC, а другие к некоторому часовому поясу, отличному от часового пояса системы Windows
После месяцев ( прерванного ) исследования я Приходим к выводу, что в Windows можно установить только «UTC» или «текущий» часовой пояс системы. Таким образом, можно сделать только следующее:
- set TZ="UTC" - unset TZ