ISOタイプ文字列をミリ秒精度のstd::chrono::time_point
形式に変換する次の関数があります。コードはLinux上では問題なく動作しましたが、今はWindowsに変換する必要があります。ISO時刻をstd :: chrono :: time_pointに変換する
同じコードを使用するには、Windows用に_WIN32
フラグを付けてコンパイルし、VS2010でサポートされていないstrptime
コードを変更しました。コンパイラは私が使用しています。
ウィンドウ上では正しく変換されません.eveyの1回限りの文字列に対しては、残りの結果が正しく入力されません。私は私が間違っているのかを調べることができません。ここで起こってwhat'sを見つけるために感謝
std::chrono::time_point<std::chrono::system_clock> convertISOStringToTimePoint(std::string isoString)
{
struct tm timeDate;
#ifdef _WIN32
timeDate.tm_year = std::stoi(isoString.substr(0, 4));
timeDate.tm_mon = std::stoi(isoString.substr(5, 2)) - 1;
timeDate.tm_mday = std::stoi(isoString.substr(8, 2));
timeDate.tm_hour = std::stoi(isoString.substr(11, 2));
timeDate.tm_min = std::stoi(isoString.substr(14, 2));
timeDate.tm_sec = std::stoi(isoString.substr(17, 2));
timeDate.tm_isdst = -1;
#else
strptime(isoString.c_str(), "%FT%TZ", &timeDate);
#endif
time_t t = mktime(&timeDate);
std::chrono::time_point<std::chrono::system_clock> time;
time = std::chrono::system_clock::from_time_t(t);
auto timeMs = std::chrono::time_point_cast<std::chrono::milliseconds>(time);
int value = std::stoi(isoString.substr(20,3));
timeMs += std::chrono::milliseconds(value);
return timeMs;
}
ヘルプ....
Windowsでどのコンパイラを使用していますか? – NathanOliver
あなたは曖昧です。あなたの[MCVE]を提示してください。 –
Windowsの場合VS2010。 – Mendes