如何在C ++中将时间转换为Windows上的特定时区?

时间:2016-08-11 16:46:19

标签: c++ timezone

有一个Unix时间戳,我需要localtime_s的等价物,但我可以在时区传递。或者,我正在寻找一种以编程方式为应用程序(而不是整个系统)更改时区的方法,以便localtime_s返回正确的值。

奇怪的是,如果我将shell中的TZ环境变量设置为GMT,然后启动我的应用程序,则localtime_s将返回GMT中的值。

我试过了:

::SetEnvironmentVariable("TZ", "GMT");
tzset();

但它不会改变以后调用localtime_s的结果

请注意,我使用VS 2013在Windows 7上运行该应用程序。

1 个答案:

答案 0 :(得分:1)

如果您愿意使用free, open-source 3rd party library,则适用于VS-2013。这里有很多关于如何使用它的例子:

https://github.com/HowardHinnant/date/wiki/Examples-and-Recipes

例如,这里是如何输出纽约和芝加哥的当前时间:

#include "tz.h"
#include <iostream>

int
main()
{
    auto now = std::chrono::system_clock::now();
    std::cout << "Current time in New York: "
              << date::make_zoned("America/New_York", now) << '\n';
    std::cout << "Current time in Chicago : "
              << date::make_zoned("America/Chicago", now) << '\n';
}

这只是我的输出:

Current time in New York: 2016-08-12 10:36:24.670966 EDT
Current time in Chicago : 2016-08-12 09:36:24.670966 CDT