Конвертировать ISO datetime в локальное datetime и извлечь время в c ++ - PullRequest
0 голосов
/ 07 мая 2018

У меня есть дата возврата ISO из API REST:

2018-05-07T06:46:24.763Z

И я хочу преобразовать его в местное время, скажем, на Филиппинах, это +8. Так должно быть

2018-05-07T14:46:24.763Z

И я хочу извлечь только время:

14:46

И преобразовать его в std :: string.

Как я могу это сделать? Нужно ли указывать местный часовой пояс или есть автоматический выбор часового пояса, как в JavaScript работает в браузере?

Спасибо.

1 Ответ

0 голосов
/ 07 мая 2018

Если вы хотите использовать бесплатную библиотеку дат / времени Говарда Хиннанта с открытым исходным кодом , вот как это может выглядеть:

#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.

Для работы с библиотекой часовых поясов требуется установка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...