Мне нужно получить текущую дату UTC в формате для печати с точностью до миллисекунд в С ++ 11. Мне нужно, чтобы это работало в Windows и Linux, поэтому кроссплатформенный код предпочтительнее. Если это невозможно, я могу написать две отдельные реализации.
Вот что я пробовал:
std::chrono::time_point<std::chrono::high_resolution_clock> time = std::chrono::system_clock::now();
std::time_t tt = std::chrono::high_resolution_clock::to_time_t(time);
struct tm* utc = nullptr;
gmtime_s(utc, &tt);
char buffer[256];
std::strftime(buffer, sizeof(buffer), "%Y-%m-%dT-%H:%M:%S. %MILLESECONDS???, utc);
Хотя, как вы можете видеть, это НЕ сводится к миллисекундам. Я могу сам отформатировать строку, если мне нужно, до тех пор, пока я могу каким-то образом получить значение в миллисекундах.
std::tm
- они не храните эту информацию - person jaggedSpire   schedule 17.10.2016gettimeofday()
может давать разрешение в единицах мкс; в Windows естьGetLocalTime()
< / a>, который возвращает разрешение в мс (илиGetSystemTime
для UTC). - person Karsten Koop   schedule 17.10.2016% 1000
и готово! Все, что для этого требуется, - это эпоха, которая составляет целое количество секунд (чтобы ваши миллисекунды не смещались), и я не знаю ни одной широко используемой эпохи, которая не находится на границе в одну секунду. Даже если вы использовали один, опять же простое сложение / вычитание вернет вас туда, где вам нужно быть. - person Lightness Races in Orbit   schedule 17.10.2016