【问题标题】:C++ compare to string datesC++ 比较字符串日期
【发布时间】:2011-12-06 20:54:59
【问题描述】:

我需要比较 2 个字符串日期以查看一个日期是否晚于另一个日期。两个日期的日期格式都在底部。我可以重新安排这个最简单的。我有提升,但它不一定是,我经历了这么多例子,似乎无法让我的大脑围绕它工作。提前谢谢,基本上我想要

2012-12-06 14:28:51

if (date1 < date2) {
 // do this
}
else {
 // do that
}  

【问题讨论】:

    标签: c++ datetime compare


    【解决方案1】:

    您使用的日期格式似乎已经按字典顺序排列,并且可以进行标准字符串比较,例如:

    std::string date1 = "2012-12-06 14:28:51";
    std::string date2 = "2012-12-06 14:28:52";
    if (date1 < date2) {
        // ...
    }
    else {
        // ...
    }
    

    在使用这种格式时,您需要确保间距和标点符号保持一致,尤其是像 2012-12-06 9:28:51 这样的内容会破坏比较。 2012-12-06 09:28:51 会起作用。

    【讨论】:

    • 谢谢 没想到这么简单
    • 对我来说,一般来说,prog 语言将日期转换为整数然后比较整数更有意义; “按字典顺序”比较事物对于开发人员来说很容易出错。
    【解决方案2】:

    您很幸运 - 您的日期已经采用正确的格式,可以进行标准字符串比较并获得正确的结果。所有部分从最重要到最不重要,并且您使用的是 24 小时时间。

    如果这些是std::strings,您可以像在示例中一样使用&lt;。如果它们是 C 风格的字符数组字符串,请使用 strcmp

    【讨论】:

    • 只要它们是 UTC。或者,更一般地说,相同的时区。
    • 你是对的,当且仅当小于 10 的小时数被零填充,例如。 01:00:00 02:00:00。 @Seth Carnegie 真的是这样吗?
    【解决方案3】:

    strcmp()返回一个整数值,表示字符串之间的关系:

     result = strcmp( string1, string2 ); 
     if( result > 0 )  strcpy( tmp, "greater than" );
     else if( result < 0 )  strcpy( tmp, "less than" );
    

    零值表示两个字符串相等。 大于零的值表示第一个不匹配的字符在 str1 中的值大于在 str2 中的值;而小于零的值则相反。

    #include <string.h>
    #include <stdio.h>
    
    char string1[] = "2012-12-06 14:28:51";
    char string2[] = "2011-12-06 14:28:51";
    
    int main( void )
    {
       char tmp[20];
       int result;
    
       printf( "Compare strings:\n   %s\n   %s\n\n\n", string1, string2 );
       result = strcmp( string1, string2 );
    
       if( result > 0 )        strcpy( tmp, "greater than" );
       else if( result < 0 )   strcpy( tmp, "less than" );
       else    strcpy( tmp, "equal to" );
    
       printf( "   strcmp:   String 1 is %s string 2\n\n", tmp );
    
       return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-10-19
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多