日、月、年の 3 つの入力を取り、それが有効かどうかを教えてくれる関数が必要でした。次に、http://www.cplusplus.com/reference/ctime/mktime/の例を使用します。
私は自分の機能を実装しようとしました:
bool ValidDate(int d, int m, int y)
{
struct tm *timeinfo;
time_t rawtime;
time (&rawtime);
timeinfo = localtime(&rawtime);
timeinfo->tm_year = y - 1900;
timeinfo->tm_mon = m - 1;
timeinfo->tm_mday = d;
if (mktime(timeinfo) == -1 )
return false;
else return true;
}
問題は、関数が希望どおりに返されないことです。たとえば、次のようにチェックしています
if (ValidDate(4,13,2010)) // out put is valid
std::cout << "valid\n";
else std::cout << "Invalid\n";
ValidDate(4,22,2010) // valid
ValidDate(344,13,2010) //valid
ValidDate(4,133,2010) //valid
ValidDate(31,12, 1920) //invalid
ValidDate(31,9,2010) //valid
ValidDate(4,9,2010) //valid
なんで?ありがとう。編集: 入力されたすべての日付は、1920 年 31 月 12 日と 2010 年 4 月 9 日を除いて無効であり、出力は正しくありませんでした。