Visual C++ 2015と2017 RCで、以下のプログラムが期待どおりに動きませんでした。

#include <iostream>
#include <sstream>
#include <iomanip>
#include <ctime>
 
int main()
{
  std::istringstream s("20170110");
 
  std::tm x = {};
  s >> std::get_time(&x, "%Y%m%d");
 
  char buf[255];
  strftime(buf, sizeof(buf), "%Y-%m-%d", &x);
  std::cout << buf << std::endl;
}

%Yで2017だけパースされることを期待しているのですが、Visual C++の実装では、20170110まで読み込んでしまうようになっていました。

libstdc++やlibc++では、ちゃんと2017だけ読み込む実装だったので、Visual C++のほうに問題がありそうです。

2017年1月15日追記: 同じ問題が報告されているのを見つけました。std::get_time fails when using formats without separators – Developer Community

スポンサード リンク

この記事のカテゴリ

  • ⇒ VC++でstd::get_timeがなんかダメ
  • ⇒ VC++でstd::get_timeがなんかダメ