c – 如何在Windows下获取时区缩写

我们试图从
strftime获取std :: tm的时区:

char timezone[50];
strftime(timezone, sizeof(timezone), "%Z", &timeCreated);

在iOS上,我们得到“EST”,这是我们想要的.但在Windows上,我们得到了“东部夏令时”.有人知道如何以缩写形式持续获得C中的当前时区吗?

我考虑通过简单地挑选每个单词中的第一个字符来从时区的全名制作缩写.但是我检查了abbreviations的清单并注意到我们可以有像这个“Chuuk Time”的时区,缩写为“CHUT”.这使得手动调整不可能.

问题不一样:Windows Timezone and their abbreviations?我不需要所有时区和缩写的完整列表.但相反,我需要使用例如strftime以当前时区的系统方式.我希望他们使用系统的当前时区和当前本地时区.

最佳答案 使用已移植到VS-2013及更高版本的此
free, open-source library

#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()));
}

这只是输出给我:

EDT

Fully documented.

此库使用IANA timezone database,并且在调用current_zone()时,将当前Windows时区转换为相应的IANA timezone.

点赞