Проблема:
Я получил целочисленную 64-битную переменную времени unix со знаком с микросекундами. Я хочу преобразовать это в формат даты и времени ISO 8601. Формат должен храниться в строке на C++.
Обратите внимание, что это микросекунды, а не секунды, и вывод должен быть строкой, а не потоком.
Я начинаю с моей временной точки
std::chrono::system_clock::time_point timePoint
Который я конвертирую в микросекунды в Unix-время.
std::chrono::system_clock::duration duration = timePoint.time_since_epoch();
int64_t microsecondsUnixTime = duration.count()/10;
И теперь мне нужно преобразовать microsecondsUnixTime в дату и время в формате ISO 8601 только в виде строки.
@ user4581301 Спасибо за ответ. Я искал, как преобразовать микросекунды unix time в ISO 8601 в строку.
В вопросе говорится, что вы начинаете с time_point, а не unix-времени. Я предлагаю вам полностью пропустить этап времени unix-ish. Если вы начинаете с unix-ish времени, очевидно, что такой совет бесполезен, и вам следует пересмотреть вопрос, чтобы удалить time_point. Вы также должны заглянуть в std::put_time и самостоятельно добавить микросекунды.





Если вы разделите microsecondsUnixTime на 106, вы можете использовать std::strftime() для генерации строки с разрешением в 1 секунду, а затем добавить дробную часть для разрешения в микросекундах:
int fraction_sec = microsecondsUnixTime % 1000000u ;
time_t seconds = microsecondsUnixTime / 1000000u ;
char timestr_sec[] = "YYYY-MM-DD hh:mm:ss.ssssss" ;
std::strftime( timestr_sec, sizeof(timestr_sec) - 1,
"%F %T", std::gmtime(&seconds) ) ;
std::ostringstream tout ;
tout << timestr_sec << '.' << std::setfill('0') << std::setw(6) << fraction_sec ;
std::string timestr_micro = tout.str() ;
std::cout << timestr_micro ;
Пример вывода:
2022-12-07 20:25:18.860289
добавил тег
chrono, потому что те, кто умеет с ним работать (а его создатели, как известно, бродят по этим залам), вероятно, могут показать вам трюк, чтобы перейти прямо отtime_pointк ISO 8601 за пару простых шагов. Этот ответ выглядит так, будто его нужно лишь немного подправить. При повторном прочтении корректировка не требуется. Попробуйте и дайте мне знать, если мы можем закрыть как дубликат.