Windows程序如何暂时更改其时区?

Rob*_*edy 11 c++ windows timezone unit-testing

我写了一个函数来返回time_t给定日期对应午夜的值.当某一天没有午夜时,它会返回最早的可用时间; 例如,当埃及进入夏令时时,就会发生这种情况.今年,时间变更将于4月29日晚上午夜生效,因此时钟从23:59直接到01:00.

现在我正在为这个函数编写单元测试,其中一个测试应该复制埃及场景.在Unix中,我可以像这样完成它:

putenv("TZ", "Egypt", true);
tzset();
Run Code Online (Sandbox Code Playgroud)

在这样做之后,进一步的呼吁localtime表现得好像他们在埃及而不是明尼苏达,我的测试通过了.但是,仅仅设置环境变量对Windows没有任何影响.如果不影响系统上运行的其他程序,我该怎么做才能让单元测试认为它在其他地方?

LBu*_*kin -2

您见过SetTimeZoneInformation Win32 API 函数吗?

  • 也许我的雇主对于单元测试的理念与你不同。如果某些内容更改了系统范围的设置,则它不再被归类为单元测试,并且不会作为构建过程的一部分运行。许多人可能使用相同的构建服务器,并且他们的测试不应相互干扰。 (8认同)