C++ 如何比较C/C+中的日期范围+;?

C++ 如何比较C/C+中的日期范围+;?,c++,C++,在C/C++中是否有任何系统定义的函数来比较两个日期 谢谢 将日期(您选择的格式)转换为纪元开始后的秒数。使用strtime和mktime 比较两个时间(秒)值。 使用MON-DD-YYYY格式的示例: 代码: #包括 时间到秒(常量字符*日期) { struct tm storage={0,0,0,0,0,0,0}; char*p=NULL; 返回时间=0; p=(char*)strtime(日期,“%d-%b-%Y”,&storage); if(p==NULL) { retval=0; }

在C/C++中是否有任何系统定义的函数来比较两个日期

谢谢

  • 将日期(您选择的格式)转换为纪元开始后的秒数。使用strtime和mktime
  • 比较两个时间(秒)值。 使用MON-DD-YYYY格式的示例:
  • 代码:

    #包括
    时间到秒(常量字符*日期)
    {
    struct tm storage={0,0,0,0,0,0,0};
    char*p=NULL;
    返回时间=0;
    p=(char*)strtime(日期,“%d-%b-%Y”,&storage);
    if(p==NULL)
    {
    retval=0;
    }
    其他的
    {
    retval=mktime(存储和存储);
    }
    返回返回;
    }
    int main()
    {
    char*date1=“2006年6月20日”;
    char*date2=“2006年6月21日”;
    时间d1=至秒(日期1);
    时间d2=至秒(日期2);
    printf(“日期比较:%s%s”,日期1,日期2);
    如果(d1==d2)printf(“相等”\n);
    如果(d2>d1)printf(“第二个日期更晚”);
    
    如果(d2受Bo Persson评论的启发:

    bool compare_DD_MM_YYYY_dates(std::string date1, std::string date2)
    {
      assert(date1.size()>=10);   assert(date2.size()>=10);
      // ISO-fy dates
      date1 = date1.substr(6,4) + date1.substr(3,2) + date1.substr(0,2) + date1.substr(10);
      date2 = date2.substr(6,4) + date2.substr(3,2) + date2.substr(0,2) + date2.substr(10);
      return date1 < date2;
    }
    
    bool比较日期(std::string date1,std::string date2)
    {
    断言(date1.size()>=10);断言(date2.size()>=10);
    //ISO财政年度日期
    date1=date1.substr(6,4)+date1.substr(3,2)+date1.substr(0,2)+date1.substr(10);
    date2=date2.substr(6,4)+date2.substr(3,2)+date2.substr(0,2)+date2.substr(10);
    返回日期1<日期2;
    }
    

    如果不够快,不要连接子字符串,而是直接比较它们。

    这里是我最喜欢的日期类(仅限C++而非C):

    使用此功能,您可以编写如下程序:

    #include "date.h"
    #include <cassert>
    
    int main()
    {
        using namespace gregorian;
        date d1 = thu[last]/mar/2011; // last Thursday in March 2011
        date d2 = mar/31/2011;       // March 31, 2011
        assert(d1 == d2);            // The last Thursday in March 2011 is 3/31/2011
        d1 += month(1);              // last Thursday in April 2011
        assert(d1 > d2);             // d1 is later than d2
        assert(d1 == month(4)/28/2011); // d1 is now Apr. 28, 2011
    }
    
    #包括“date.h”
    #包括
    int main()
    {
    使用名称空间gregorian;
    日期d1=thu[last]/mar/2011;//2011年3月的最后一个星期四
    日期d2=2011年3月31日;//2011年3月31日
    断言(d1==d2);//2011年3月的最后一个星期四是2011年3月31日
    d1+=第(1)个月;//2011年4月的最后一个星期四
    断言(d1>d2);//d1晚于d2
    断言(d1==2011年4月28日);//d1现在是2011年4月28日
    }
    
    这个软件是免费使用的,你甚至不必相信任何人

    更新


    本软件的最新版本是:

    C还是C++?日期是什么格式?你是如何代表日期的?如果你使用的是“EngEY”这样简单的东西,你可以使用简单的数学比较。我需要这样的格式,如MM/DD/YYYY HR:MI:SECTO坏你不使用ISO标准日期YYYY-MM-DD,然后你可以使用字符串比较::-)KalTik/USER 692270接受“Kalthk的回答”的另一个问题。停止这个伪造的农民。这是如此美丽。恭喜!如此优雅,如此……只是美丽。-菲尔。谢谢。这个图书馆对你很有帮助。C++委员会坚定地热情地拒绝了它。如果对你有帮助,我已经撤退了。我支持一小部分与chrono兼容的日期算法,任何人都可以在此基础上高效地构建日期类。这将允许更广泛的受众(包括您自己)进行更多的日期API实验。这些低级日期算法可以在此处找到:。请随意使用这些算法--公共域。它昨晚我很晚才发现这一点,并发表了我的评论。我现在相信,虽然它没有反映出我看到这一点后有多激动和印象深刻。在工程领域,很少看到既能很好地完成这项工作,又不言自明的东西。这一解决方案从语义/语言上做到了这一点这是一个非常正确的说法。这是一个罕见的、制作精良的例子,它涵盖了一个非常重要的主题:日期。鉴于我的评论确实达到了目的,我想适当地祝贺你。委员会的立场令人遗憾。谢谢。
    #include "date.h"
    #include <cassert>
    
    int main()
    {
        using namespace gregorian;
        date d1 = thu[last]/mar/2011; // last Thursday in March 2011
        date d2 = mar/31/2011;       // March 31, 2011
        assert(d1 == d2);            // The last Thursday in March 2011 is 3/31/2011
        d1 += month(1);              // last Thursday in April 2011
        assert(d1 > d2);             // d1 is later than d2
        assert(d1 == month(4)/28/2011); // d1 is now Apr. 28, 2011
    }