回答
- 轉換日期(你挑格式)秒,因爲時代的開始。使用strptime和mktime。
- 比較兩個time_t(秒)值。 例如使用MON-DD-YYYY格式:
CODE:
#include <time.h>
time_t to_seconds(const char *date)
{
struct tm storage={0,0,0,0,0,0,0,0,0};
char *p=NULL;
time_t retval=0;
p=(char *)strptime(date,"%d-%b-%Y",&storage);
if(p==NULL)
{
retval=0;
}
else
{
retval=mktime(&storage);
}
return retval;
}
int main()
{
char *date1="20-JUN-2006";
char *date2="21-JUN-2006";
time_t d1=to_seconds(date1);
time_t d2=to_seconds(date2);
printf("date comparison: %s %s ",date1,date2);
if(d1==d2) printf("equal\n");
if(d2>d1) printf("second date is later\n");
if(d2<d1) printf("seocnd date is earlier\n");
return 0;
}
由博·佩爾鬆的評論的啓發:
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;
}
如果不夠快,不串聯的子串,但直接比較它們。
這是我最喜歡的約會類(僅限於C++,不C):
http://howardhinnant.github.io/date.html
有了這個,你可以寫這樣的程序:
#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
}
該軟件是免費使用。你甚至不用信任任何人。 1 header,1 source。
更新
該軟件的最新版本是在這裏:https://howardhinnant.github.io/date/date.html
這是如此美麗。恭喜!如此優雅,所以......美麗。 ;-) – Phil 2013-11-10 02:03:50
@菲爾:謝謝菲爾。很高興這個圖書館對你有幫助。 C++委員會堅決並熱烈地拒絕了它。如果它對你有幫助,我已經將我的立場撤回到一小部分兼容計時器的日期算法中,任何人都可以有效地建立一個日期類。這應該允許更廣泛的受衆(包括您自己)進行更多日期API實驗。這些低級日期算法可以在這裏找到:http://home.roadrunner.com/~hinnant/date_algorithms.html。請隨意使用這些算法,但是您希望 - 公有領域。 – 2013-11-10 03:27:36
昨晚我遇到這個問題並發表了我的評論時,已經很晚了。我現在認爲,儘管我沒有看到這一點,但反映出我的興奮和印象如何。在工程領域看到一些能夠很好地完成工作並且不言自明的東西實屬罕見。這個解決方案完全以語義/語言正確的方式進行,這是有道理的。這是那些罕見的,製作精美的作品之一,它涵蓋了一個重要的主題:日期。鑑於我的評論確實達到了,我想祝賀你。委員會的立場是一個恥辱。謝謝。 – Phil 2013-11-10 11:59:54
- 1. 日期範圍比較
- 2. C#比較日期範圍
- 3. Python的比較日期範圍列表
- 4. Highcharts比較日期範圍條形圖
- 5. 比較兩個日期時間範圍
- 6. 使用JQuery比較日期範圍?
- 7. 與指定日期的日期範圍比較
- 8. 將日期範圍與一組日期範圍進行比較SQL
- 9. 比較日期到CSV日期範圍 - BASH
- 10. 日期時間和日期範圍比較
- 11. Oracle SQL - 將日期與日期範圍進行比較
- 12. 具有較小日期範圍(結果集)的PostgreSQL查詢比日期範圍較大(結果)的查詢慢
- 13. 如何比較Swift中的範圍?
- 14. 使用XPATH在CQ中的日期範圍比較
- 15. 比較兩個日期範圍時一個範圍內有一個範圍開始日期
- 16. 比較Excel中的範圍
- 17. 如何將當前日期與MySQL中的日期範圍或離散日期值進行比較?
- 18. 在谷歌分析API中比較日期範圍
- 19. BizTalk業務規則引擎比較日期範圍內的DateTimeNow?
- 20. 日期範圍查詢方法的性能比較
- 21. 製作/比較日期範圍的更好方法?
- 22. 谷歌電子表格:比較日期與單元格範圍內的日期
- 23. 從範圍比較日期到今天的谷歌Apps腳本日期
- 24. PHP如何比較日期和日期?
- 25. mysql日期範圍與較大日期之前的較大日期
- 26. 在日期範圍範圍
- 27. 薩姆值與多個準則比較日期範圍
- 28. Moment.js - 日期比較:捕捉最小範圍
- 29. 在比較日期範圍時遇到問題
- 30. 如何比較solr中的日期?
C或C++?另外,日期的格式是什麼? – EboMike 2011-03-31 04:42:07
你代表日期?如果您使用簡單的「自時代以來的秒數」,您可以使用簡單的數學比較。 – yan 2011-03-31 04:42:21
格式:DD/MM/YYYY – karthik 2011-03-31 04:44:51