Ok, ecco lo snippet di codice finale che risponde alla mia domanda. Ho pensato di condividerlo nel caso in cui potrebbe essere utile per altre persone in futuro. Grazie a Fred Larson per aver indicato l'esempio Boost.
Ho scelto Boost per eseguire il calcolo DateTime perché la mia applicazione utilizza già Boost da qualche altra parte. Penso che avrei potuto usare anche Qt, anche se non posso assolutamente confermarlo.
Supponendo DateTime è definito come:
class DateTime
{
public:
int year;
int month;
int day;
int hour;
int min;
int sec;
int millisec;
};
Per fare un semplice confronto 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;
}
Per aggiungere 2 DateTime insieme per restituire un nuovo 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;
}
Se hai la tua classe, perché ne hai bisogno di un'altra? –
O, ancora più importante, se stai per utilizzare la classe di qualcun altro, perché usarlo solo per i confronti? Usa la loro classe. Il lavoro è fatto per te. Abbandona la tua classe. – GManNickG
Il motivo è perché la mia applicazione è una libreria C++ che verrà utilizzata da un'altra applicazione. 1) Non voglio che debbano includere librerie Boost per far uso della mia libreria. 2) Questa classe DateTime è già stata utilizzata in molti posti di un sistema legacy. Grazie per i commenti però. – sivabudh