Как лучше сравнивать даты?

178
06 апреля 2018, 18:32

Необходимо в цикле сравнивать даты, в чем у меня может быть ошибка?

bool operator >=(const Date &d1, const Date &d2)
{
    return std::tie(d1.year, d1.month, d1.day, d1.hour, d1.minute) >=
    std::tie(d2.year, d2.month, d2.day, d2.hour, d2.minute);
}

Переопределил оператор

struct Date
{
     int year;
     int month;
     int day;
     int hour;
     int minute;
     Date(int y, int m, int d, int h = 10, int mi = 10) : year(y), month(m), day(d),hour(h), minute(mi) {}
};

Структура с датами

for (int i = 0; i < count; i++)
{
    if (bars[i].date > end)
        break;
    if (bars[i].date >= start)
        currentBar.push_back(bars[i]);
}

Вот цикл, в котором сравниваю. При отладке значения корректно добавлены, в массиве bars последние элементы 2018 года, а start 2016 года. Но он не заходит по условию. Что может быть не так?

Answer 1

Могу вам предложить такую реализацию. С перегрузкой оператора "меньше". Часы и минуты добавить по тому же принципу.

class Date {
public:
// конструктор выбрасывает исключение, если его аргументы некорректны
Date(int new_year, int new_month, int new_day) {
year = new_year;
if (new_month > 12 || new_month < 1) {
  throw logic_error("Month value is invalid: " + to_string(new_month));
}
month = new_month;
if (new_day > 31 || new_day < 1) {
  throw logic_error("Day value is invalid: " + to_string(new_day));
}
day = new_day;
}
int GetYear() const {
return year;
}
int GetMonth() const {
return month;
}
int GetDay() const {
return day;
}
private:
int year;
int month;
int day;
};
bool operator<(const Date& lhs, const Date& rhs) {
// воспользуемся тем фактом, что векторы уже можно сравнивать на <:
// создадим вектор из года, месяца и дня для каждой даты и сравним их
return vector<int>{lhs.GetYear(), lhs.GetMonth(), lhs.GetDay()} <
  vector<int>{rhs.GetYear(), rhs.GetMonth(), rhs.GetDay()};
}
READ ALSO
Qt \ Sql Получение родительских атрибутов

Qt \ Sql Получение родительских атрибутов

Есть таблицы: "Единицы измерения" код наименование

204
Подключение клиента ActiveMQ по SSL

Подключение клиента ActiveMQ по SSL

Имею простой клиент для высылания сообщений для ActiveMQ на C++ очень похожий на этот пример

199
Объекты компонента TImage

Объекты компонента TImage

Мне нужно создать двусвязный список из нарисованных мною картинокРисую я в компоненте TImage (прямоугольники и эллипсы)

197