有一个Unix时间戳,我需要localtime_s的等价物,但我可以在时区传递。或者,我正在寻找一种以编程方式为应用程序(而不是整个系统)更改时区的方法,以便localtime_s返回正确的值。
奇怪的是,如果我将shell中的TZ环境变量设置为GMT,然后启动我的应用程序,则localtime_s将返回GMT中的值。
我试过了:
::SetEnvironmentVariable("TZ", "GMT");
tzset();
但它不会改变以后调用localtime_s的结果
请注意,我使用VS 2013在Windows 7上运行该应用程序。
答案 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