2

次のコードでどのような間違いをしたのかわかりませんが、Visual C ++ 2010 sp1を使用すると、以下に貼り付けたコードの結果は1か月の間違いを示しています。

struct tm timeStamp;
timeStamp.tm_year = 2012 - 1900;
timeStamp.tm_mon = 7;
timeStamp.tm_mday = 19;
timeStamp.tm_hour = 20;
timeStamp.tm_min = 55;
timeStamp.tm_sec = 22;
timeStamp.tm_isdst = -1;


time_t time_val = mktime(&timeStamp);

const int buff_size = 20;
char buff[buff_size] = {0};
strftime(buff, buff_size, "%Y-%m-%d %H:%M:%S", localtime( &time_val ));


cout << "Original time:\t"
    << timeStamp.tm_year + 1900 << "-" << timeStamp.tm_mon << "-" << timeStamp.tm_mday << " "
    << timeStamp.tm_hour << ":" << timeStamp.tm_min << ":" << timeStamp.tm_sec << endl;
cout << "Converted time:\t" << buff << endl;

コンパイルしたときのこのコードの出力結果は次のとおりです。

Original time:  2012-7-19 20:55:22
Converted time: 2012-08-19 20:55:22
4

1 に答える 1

2

tm_monフィールドstruct tmはから0-11です。ここで、0==1月および11==12月です。strftimeこれを知っており、内部で補償します。あなたcoutはこれを補償しません。

C++リファレンスページにstruct tmは、すべての値の範囲の定義が含まれています。

于 2012-07-19T16:51:30.140 に答える