C++ 将ISO datetime转换为本地datetime,并以c++;

C++ 将ISO datetime转换为本地datetime,并以c++;,c++,datetime,C++,Datetime,我有一份REST api的iso日期报告: 2018-05-07T06:46:24.763Z 我想把它转换成本地日期时间,比如说在菲律宾,它是+8。应该如此 2018-05-07T14:46:24.763Z 我只想提取时间: 14:46 并将其转换为std::string 我怎么做? 我是否需要指定本地时区,或者是否有一个自动获取时区的方法,就像javascript在浏览器中的工作方式一样 谢谢。如果您想使用,以下是它的外观: #include "date/tz.h" #include <

我有一份REST api的iso日期报告:

2018-05-07T06:46:24.763Z

我想把它转换成本地日期时间,比如说在菲律宾,它是+8。应该如此

2018-05-07T14:46:24.763Z

我只想提取时间:

14:46
并将其转换为std::string

我怎么做? 我是否需要指定本地时区,或者是否有一个自动获取时区的方法,就像javascript在浏览器中的工作方式一样

谢谢。

如果您想使用,以下是它的外观:

#include "date/tz.h"
#include <iostream>
#include <sstream>
#include <string>

std::string
time_in_philippines(const std::string& utc)
{
    using namespace std;
    using namespace std::chrono;
    using namespace date;
    istringstream in{utc};
    sys_time<milliseconds> tp;
    in >> parse("%FT%TZ", tp);
    auto zt = make_zoned("Asia/Manila", tp);
    return format("%H:%M", zt);
}

int
main()
{
    std::cout << time_in_philippines("2018-05-07T06:46:24.763Z") << '\n';
}
sys\u time
只是一个基于
chrono::system\u clock
chrono::time\u点,但精度为
毫秒。
parse
函数将使用指定的解析标志将
时间点
解析出istream

时间点
隐含为UTC。要将其转换为
分区时间
可以将UTC
时间点
时区
配对(本例中为“亚洲/马尼拉”)。如果您的计算机当前的本地时区已经是“亚洲/马尼拉”,您还可以通过以下方式获取当前时区:

    auto zt = make_zoned(current_zone(), tp);
下一步只需使用所需的标志格式化分区时间,在本例中为“%H:%M”<代码>格式
返回一个
标准::字符串


一些用于使用时区库。

查看boost::date\u时间库。特别是在类POSIXYTIME和自由函数与ISO时间序列化/帕辛的合作中。您可能想看看Howard Hinnant的,它正在为C++ 20取得良好进展。<代码> < /Cord>头可以帮助您从时间的时代获得本地时间。C++方式将涉及使用STD::这似乎是C++中CCTIN的继承者。转换只需要增加8小时。注意std::now()获取本地时间。@noyruto88是的。“需要安装”链接提供了VS-2015或更高版本的完整说明。它由1个需要编译的源文件组成。Windows还需要手动安装curl和7-zip,否则需要手动下载两个数据库文件。请参阅安装说明中标题为“Windows专用:”的部分。谢谢您,先生。你有安装这个库的教程吗?恐怕没有。但如果你有具体的问题,我很乐意帮忙。我很高兴在这里或网上回答。嗨,先生,在任何地方都可以使用这个图书馆获取时区吗。例如,如果该应用程序将在日本使用,则该应用程序将获得日本的时区,如果在菲律宾使用,则菲律宾的时区将获得。那有可能吗。就像自动检测时区一样?谢谢。@noyruto88:是的。使用
当前时区()
检测计算机当前设置的时区。
    auto zt = make_zoned(current_zone(), tp);