Если вы хотите использовать бесплатную библиотеку дат / времени Говарда Хиннанта с открытым исходным кодом , вот как это может выглядеть:
#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
на основе chrono::system_clock
, но с точностью milliseconds
. Функция parse
будет анализировать time_point
из потока, используя указанные флаги синтаксического анализа.
time_point
неявно в формате UTC. Чтобы преобразовать его в zoned_time<milliseconds>
, соедините UTC time_point
с time_zone
(в данном примере «Азия / Манила»). Если текущий местный часовой пояс вашего компьютера уже "Азия / Манила", можно также выбрать текущий часовой пояс с помощью:
auto zt = make_zoned(current_zone(), tp);
Далее просто форматируем zoned_time
с желаемыми флагами, в этом случае «% H:% M». format
возвращает std::string
.
Для работы с библиотекой часовых поясов требуется установка .