Bon, voici l'extrait de code final qui répond à ma propre question. J'ai pensé partager cela au cas où cela pourrait être utile à d'autres personnes dans le futur. Merci à Fred Larson d'avoir montré l'exemple Boost.
J'ai choisi Boost pour faire le calcul DateTime car mon application utilise déjà Boost ailleurs. Je pense que j'aurais pu aussi utiliser Qt, même si je ne peux pas confirmer complètement.
En supposant DateTime est défini comme:
class DateTime
{
public:
int year;
int month;
int day;
int hour;
int min;
int sec;
int millisec;
};
Pour faire une comparaison simple DateTime
bool DateTime::operator < (const DateTime& dt_)
{
using namespace boost::posix_time;
using namespace boost::gregorian;
ptime thisTime(date(this->year,this->month,this->day),
hours(this->hour) +
minutes(this->min) +
seconds(this->sec) +
boost::posix_time::millisec(int(this->millisec)));
ptime thatTime(date(dt_.year,dt_.month,dt_.day),
hours(dt_.hour) +
minutes(dt_.min) +
seconds(dt_.sec) +
boost::posix_time::millisec(int(dt_.millisec)));
return thisTime < thatTime;
}
Pour ajouter 2 DateTime ensemble pour retourner une nouvelle DateTime
DateTime DateTime::operator + (const DateTime& dt_)
{
using namespace boost::posix_time;
using namespace boost::gregorian;
date thisDate(this->year, this->month, this->day);
date newDate = thisDate + years(dt_.year) + months(dt_.month) + days(dt_.day);
ptime newDateTime(newDate,
hours(this->hour) + hours(dt_.hour) +
minutes(this->min) + minutes(dt_.min) +
seconds(this->sec) + seconds(dt_.sec) +
boost::posix_time::millisec(int(this->millisec)) +
boost::posix_time::millisec(int(dt_.millisec))
);
DateTime dateTime;
date t1_date = newDateTime.date();
dateTime.year = t1_date.year();
dateTime.month = t1_date.month();
dateTime.day = t1_date.day();
time_duration t1_time = newDateTime.time_of_day();
dateTime.hour = t1_time.hours();
dateTime.min = t1_time.minutes();
dateTime.sec = t1_time.seconds();
dateTime.millisec = t1_time.fractional_seconds()/1000.0f;
return dateTime;
}
Si vous avez votre propre cours, pourquoi en avez-vous besoin? –
Ou plus important encore, si vous allez utiliser la classe de quelqu'un d'autre, pourquoi l'utiliser uniquement pour des comparaisons? Utilisez juste leur classe. Le travail est fait pour vous. Baisse ta classe. – GManNickG
La raison en est que mon application est une bibliothèque C++ que d'autres applications utiliseront. 1) Je ne veux pas qu'ils aient à inclure des bibliothèques Boost pour qu'ils puissent utiliser ma bibliothèque. 2) Cette classe DateTime a déjà été utilisée dans de nombreux endroits d'un système existant. Merci pour les commentaires cependant. – sivabudh