「YYYY-MM-DD HH:MM:SS」という文字列形式で指定された時刻を検証し、最新の日付を確認したいとします。「YYYY:MM:DD HH:MM:SS」形式の時刻をC++で検証する方法は?
私は与えられた文字列を秒に変換し、次のように比較することができます。
std::string dateStr1 = "2016-06-31 02:00:58"; // June 31 2016 does not exist
std::string dateStr2 = "02:00:00";
std::istringstream date_s(dateStr1);
struct tm date_c;
date_s >> std::get_time(&date_c, "%Y-%m-%d %H:%M:%S");
std::time_t seconds1 = std::mktime(& date_c);
std::istringstream date_s2("2001-10-01 02:10:00");
struct tm date_c2;
date_s2 >> std::get_time(&date_c2, "%Y-%m-%d %H:%M:%S");
std::time_t seconds2 = std::mktime(& date_c2);
if(seconds1 > seconds2){
cout<<" Seconds1 is greater "<<seconds1<<endl;
}else{
cout<<" Seconds2 is greater "<<seconds2<<endl;
}
回答:Seconds1 is greater 1467334858
問題:このメソッドは存在しない日付に変換します。 (dateStr1に指定された日付は存在しませんが、mktime()はこの日付の時刻を指定します)
日付が存在するかどうかを確認する方法はありますか? cppreference documentation of mktimeから
これが原因タイムゾーンの変更とうるう秒に非自明です。 – MSalters