C ++: как мне преобразовать строку, которая имеет время Unix, в * tm?(Ошибка при использовании strptime: "не удалось преобразовать 'String' в 'tm *'") - PullRequest
0 голосов
/ 19 октября 2018

Я использую API для получения времени UNIX, но оно появляется в виде строки, то есть "1539944398000"

Я хотел бы преобразовать это время в UNIX, чтобы я мог манипулировать им (и в конечном итоге извлечьтолько часы / минуты для печати).

Вот код, который я пробовал:

String nextBusScheduled = client2.readStringUntil('<');
char bufScheduled[40];
strptime(bufScheduled, "%Y-%m-%d", nextBusScheduled);

И это ошибка, которую я получил:

cannot convert 'String' to 'tm*' for argument '3' to 'char* strptime(const char*, const char*, tm*)' 

1 Ответ

0 голосов
/ 20 октября 2018

Я рекомендую Библиотека даты / времени Говарда Хиннанта .Для этого упражнения вам нужен только заголовок date.h (без источника):

#include "date/date.h"
#include <chrono>
#include <cstdint>
#include <iostream>
#include <sstream>

int
main()
{
    using namespace date;
    using namespace std;
    using namespace std::chrono;
    int64_t i;
    istringstream in{"1539944398000"};
    in >> i;
    sys_time<milliseconds> tp{milliseconds{i}};
    cout << tp << '\n';
    cout << format("%H:%M", tp) << '\n';
}

Просто выполните синтаксический анализ в 64-битном целочисленном типе и создайте std::chrono::milliseconds из этого анализа (пока этоэто просто C ++ 11).Тогда вы можете построить sys_time<milliseconds> из этого.sys_time<milliseconds> - это просто псевдоним типа для std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds>, или, проще говоря: Unix Time с точностью до миллисекунды.

Я показываю два способа его распечатки, чтогде date.h действительно помогает.Этот пример выводит:

2018-10-19 10:19:58.000
10:19

Этот код будет портировать на C ++ 20, просто удалив #include "date/date.h" и using namespace date;.

...