如何在c++中将时间转换为windows上的特定时区

How convert time to specific timezone on windows in C++?

本文关键字:windows 定时区 转换 时间 c++      更新时间:2023-10-16

有一个Unix时间戳,我需要等效的localtime_s,但是我可以传入时区。另外,我正在寻找一种方法来改变时区编程的应用程序(而不是整个系统),使localtime_s返回正确的值。

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

我试过:

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

但是它不会改变以后调用localtime_s

的结果。

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

如果你愿意使用一个免费的、开源的第三方库,它可以在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