我有两个字符串srt1和str2:
std::string str1 = "20110627120000";
std::string str2 = "20110629120000";
我只需要将它们转换为时间格式并比较哪一个更大。 我正在使用下面的代码,但我得到了分段错误:
tm tm1,tm2;
sscanf(str1.c_str(),"%4d%2d%2d %2d%2d%2d",&tm1.tm_year,&tm1.tm_mon,&tm1.tm_mday,&tm1.tm_hour,&tm1.tm_min,&tm1.tm_sec);
sscanf(str2.c_str(),"%4d%2d%2d %2d%2d%2d",&tm2.tm_year,&tm2.tm_mon,&tm2.tm_mday,&tm2.tm_hour,&tm2.tm_min,&tm2.tm_sec);
std::cout << "5 \n";
if ((tm1.tm_year < tm2.tm_year) && (tm1.tm_mon<tm2.tm_mon) && (tm1.tm_mday<tm2.tm_mday ))
{
std::cout << str2 <<"is greater \n";
}
答案 0 :(得分:0)
为什么在完全可比的时候转换字符串呢?
int main()
{
std::string str1 = "20110627120000";
std::string str2 = "20110629120000";
std::cout << ((str1 < str2) ? "True" : "False") << std::endl;
}
使用格式在“%4d%2d%2d%2d%2d%2d”之间有空格的sscanf看起来很明显。不检查结果,是。
答案 1 :(得分:0)
您指定格式的日期可以轻松转换为整数然后进行比较。见下文:
#include <iostream>
int main()
{
unsigned long long date_a = std::stoull("20110627120000");
unsigned long long date_b = std::stoull("20110629120000");
std::cout << std::max(date_a, date_b) << std::endl;
return 0;
}