OK, đây là đoạn mã cuối cùng trả lời câu hỏi của riêng tôi. Tôi nghĩ đến việc chia sẻ điều này trong trường hợp nó có thể hữu ích cho một số người khác trong tương lai. Cảm ơn Fred Larson đã chỉ ra ví dụ Boost.
Tôi đã chọn Boost để thực hiện phép tính DateTime vì ứng dụng của tôi đã sử dụng Boost ở một nơi khác. Tôi nghĩ rằng tôi có thể đã có thể sử dụng Qt là tốt, mặc dù tôi không thể hoàn toàn xác nhận.
Giả sử DateTime được định nghĩa là:
class DateTime
{
public:
int year;
int month;
int day;
int hour;
int min;
int sec;
int millisec;
};
Để làm một DateTime so sánh đơn giản
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;
}
Để thêm 2 DateTime với nhau để trả về một DateTime mới
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;
}
Nếu bạn có lớp học của riêng bạn tại sao bạn lại cần một lớp khác? –
Hoặc quan trọng hơn, nếu bạn định sử dụng lớp của người khác, tại sao chỉ sử dụng nó để so sánh? Chỉ cần sử dụng lớp học của họ. Công việc được thực hiện cho bạn. Mương lớp học của bạn. – GManNickG
Lý do là vì ứng dụng của tôi là thư viện C++ mà ứng dụng khác sẽ sử dụng. 1) Tôi không muốn họ phải bao gồm thư viện Boost để họ sử dụng thư viện của tôi. 2) Lớp DateTime này đã được sử dụng ở nhiều nơi của một hệ thống cũ. Cảm ơn các bình luận. – sivabudh