Thursday, 6 August 2009

Compare two dates in C++

When comparing two dates that are of the data type string they will need to be first converted to date objects. Once this is done a simple comparison test is possible.

void compareDates(string date1, string date2) {
//create a time_t object
time_t rawtime;
time(&rawtime);

//create a tm structure and load in date1
struct tm * timeinfo1;
timeinfo1 = localtime(&rawtime);
timeinfo1->tm_year = atoi(date1.substr(6).c_str()) - 1900;
timeinfo1->tm_mon = atoi(date1.substr(3, 2).c_str()) - 1;
timeinfo1->tm_mday = atoi(date1.substr(0, 2).c_str());

//create a tm structure and load in date2
struct tm * timeinfo2;
timeinfo2 = localtime(&rawtime);
timeinfo2->tm_year = atoi(date2.substr(6).c_str()) - 1900;
timeinfo2->tm_mon = atoi(date2.substr(3, 2).c_str()) - 1;
timeinfo2->tm_mday = atoi(date2.substr(0, 2).c_str());

//compare the dates
if(timeinfo1 > timeinfo2) {
cout << "date1 is the latest date";
}
else {
cout << "date2 is the latest date";
}
This function takes two strings, date1 and date2. Both dates are in the format of dd-mm-yyyy. Note that the hyphens can be any character as the sub-strings ignores them.

The function works by creating two tm objects and loading in some demo time data from our time_t object at the beginning of the function. This creates two identical time/date objects. We then overwrite the dates in these objects with our two dates. Once complete we have our two identical date/time objects but now with our two dates overwriting the date parts.

The final lines simply compare the two dates and outputs whichever one is the latest.

No comments:

Post a Comment