如何在Windows下获取时区缩写

Yuc*_*ong 5 c++ windows datetime

我们正试图从获得的时区std::tmstrftime

char timezone[50];
strftime(timezone, sizeof(timezone), "%Z", &timeCreated);
Run Code Online (Sandbox Code Playgroud)

在iOS上,我们得到的是“ EST”。但是在Windows上,我们会收到“东部夏令时”。有人知道如何以缩写形式一致地获取C ++中的当前时区吗?

我考虑通过简单地选择每个单词中的第一个字符来在时区的全名中进行缩写。但是我检查了缩写词的列表,并注意到我们可以使用像“ Chuuk Time”这样的时区并将其缩写为“ CHUT”。这使得无法进行手动调整。


与问题:Windows时区及其缩写不同?我不需要所有时区和缩写的完整列表。但是,例如,我需要一种系统的方法来使用当前时区strftime。我希望他们使用系统的当前时区和当前本地时间。

How*_*ant 1

使用这个已移植到 VS-2013 及更高版本的免费开源库:

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

int
main()
{
    using namespace std::chrono;
    using namespace date;
    std::cout << format("%Z\n", make_zoned(current_zone(), system_clock::now()));
}
Run Code Online (Sandbox Code Playgroud)

这只是我的输出:

EDT
Run Code Online (Sandbox Code Playgroud)

完整记录。

该库使用IANA 时区数据库,并且在current_zone()调用时将当前 Windows 时区转换为适当的IANA 时区