将字符串转换为时间进行比较

时间:2013-09-06 19:02:53

标签: c++ time

我有两个字符串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";
}

2 个答案:

答案 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;
}