C++ 如何比较C/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; }
#包括
时间到秒(常量字符*日期)
{
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
}