Как Windows-программа может временно изменить свой часовой пояс?

Я записал функцию для возврата time_t значение, соответствующее полуночи в данный день. Когда нет никакой полуночи в течение данного дня, это возвращает самое раннее доступное время; та ситуация может произойти, например, когда Египет вводит летнее время. В этом году изменение времени вступает в силу в полночь ночью от 29 апреля, таким образом, часы идут непосредственно с 23:59 до 1:00.

Теперь я пишу модульные тесты на эту функцию, и один из тестов должен копировать сценарий Египта. В Unix я могу выполнить его как это:

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

После выполнения этого, дальнейших вызовов к localtime ведите себя, как будто они находятся в Египте вместо Миннесоты и моей тестовой передачи. Установка Merely переменная среды не имеет никакого эффекта на Windows, все же. Что я могу сделать, чтобы заставить модульный тест думать, что это где-то в другом месте, не влияя на остальную часть программ, работающих на системе?

11
задан Rob Kennedy 9 April 2010 в 21:21
поделиться

3 ответа

Я использовал setlocale (LC_ALL, "deu_aut") , чтобы переключить настройки языка / страны на Австрию - заявлено в locale .h . К сожалению, я не нашел строки языка / страны для Египта, но, возможно, это дает вам подсказку.

0
ответ дан 3 December 2019 в 11:03
поделиться

Вы видели функцию Win32 API SetTimeZoneInformation ?

-1
ответ дан 3 December 2019 в 11:03
поделиться

У меня точно такое же требование:

-> некоторые процессы должны быть привязаны к UTC, а другие к некоторому часовому поясу, отличному от часового пояса системы Windows

После месяцев ( прерванного ) исследования я Приходим к выводу, что в Windows можно установить только «UTC» или «текущий» часовой пояс системы. Таким образом, можно сделать только следующее:

     - set TZ="UTC" 
     - unset TZ
0
ответ дан 3 December 2019 в 11:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: