В Visual Studio 2013 я только что использовал
#include <chrono>
#include <ctime>
#include <iostream>
#include <iomanip>
#include <sstream>
std::string Time_Point_String(const std::chrono::high_resolution_clock::time_point & timePoint)
{
time_t timeNow = std::chrono::system_clock::to_time_t(timePoint);
tm time = *localtime(&timeNow);
std::stringstream timeString;
timeString << std::setfill('0') << 1900 + time.tm_year << "-" << std::setw(2) << time.tm_mon + 1 << "-" << std::setw(2) << time.tm_mday << " " << std::setw(2) << time.tm_hour << ":" << std::setw(2) << time.tm_min << ":" << std::setw(2) << time.tm_sec;
return timeString.str();
}
int main()
{
const std::chrono::high_resolution_clock::time_point & timePoint = std::chrono::high_resolution_clock::now();
std::cout << Time_Point_String(timePoint);
return 0;
}
Но в Visual Studio 2017 я получаю ошибку компилятора:
Ошибка C2664 '__time64_t std :: chrono :: system_clock:: to_time_t (const std :: chrono :: system_clock :: time_point &) noexcept ': невозможно преобразовать аргумент 1 из' const std :: chrono :: stable_clock :: time_point 'в' const std :: chrono :: system_clock ::time_point & '
Так что больше невозможно преобразовать high_resolution_clock::time_point
в другой time_point
, такой как system_clock::time_point
, и нет возможности напрямую преобразовать high_resolution_clock::time_point
в time_t
?
Как я могу справиться с этой ситуацией?Возможно ли это вообще (некоторые сообщения SO говорят, что это просто совершенно разные часы, и конверсия не имеет смысла)?Насколько я видел, функция сделала то, что ожидала, в приложении Visual Studio 2013, она предоставила правильное местное время для точки времени high_resolution.