我从REST api返回iso日期:
2018-05-07T06:46:24.763Z
我希望将其转换为本地日期时间,比如在菲律宾,它是+8。所以应该是
2018-05-07T14:46:24.763Z
我想只抽出时间:
14:46
并将其转换为std :: string。
我该怎么办? 我是否需要指定本地时区,或者是否有自动获取时区,就像javascript在浏览器中的工作方式一样?
谢谢。
答案 0 :(得分:1)
如果您想使用Howard Hinnant's free, open-source date/time library,可能会出现以下情况:
#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';
}
该程序输出:
14:46
sys_time<milliseconds>
只是基于chrono::time_point
的{{1}},但精度为chrono::system_clock
。 milliseconds
函数将使用指示的解析标记解析istream中的parse
。
time_point
隐式为UTC。要将其转换为time_point
,请将UTC zoned_time<milliseconds>
与time_point
(此示例中为“亚洲/马尼拉”)配对。如果您的计算机当前的当地时区已经是“亚洲/马尼拉”,那么还可以通过以下方式获取当前时区:
time_zone
接下来只需使用所需的标志格式化 auto zt = make_zoned(current_zone(), tp);
,在这种情况下为“%H:%M”。 zoned_time
会返回format
。
有些installation is required用于处理时区库。