Wie kann ein Windows-Programm seine Zeitzone vorübergehend ändern?
Ich habe eine Funktion geschrieben, um das @ zurückzugebtime_t
Wert, der Mitternacht an einem bestimmten Tag entspricht. Wenn für einen bestimmten Tag keine Mitternacht vorliegt, wird die früheste verfügbare Zeit zurückgegeben. Diese Situation kann beispielsweise eintreten, wenn Ägypten in die Sommerzeit wechselt. In diesem Jahr wird die Zeitumstellung in der Nacht zum 29. April um Mitternacht wirksam, sodass die Uhr direkt von 23:59 Uhr auf 01:00 Uhr wechselt.
Nun schreibe ich Unit-Tests für diese Funktion, und einer der Tests sollte das Ägypten-Szenario replizieren. In Unix kann ich das so machen:
putenv("TZ", "Egypt", true);
tzset();
Danach weitere Aufrufe anlocaltime
Benimm dich, als ob sie in Ägypten statt in Minnesota sind, und meine Tests bestehen. Das bloße Setzen der Umgebungsvariablen hat jedoch keine Auswirkungen auf Windows. Was kann ich tun, um den Komponententest für einen anderen Ort zu halten, ohne die übrigen auf dem System ausgeführten Programme zu beeinträchtigen?