2014-12-19 5 views
0
gregorian::date date1 = 2014-12-18; 
gregorian::date date2 = 2014-12-19; 
gregorian::date currentDate; 

if(date1 < date2) 
{ 
    date1 = currentDate; 
} 
else 
{ 
    date2 = currentDate; 
} 

Функциональность, аналогичная этому, идеально подходит для моей проблемы, и мне было интересно, можно ли сравнивать даты или если существует существующая функция?Как сравнить две отдельные даты с помощью библиотеки Boost?

+1

+1 для творчества в инициализаторах. Соблазн иметь UDL, который позволяет записывать даты таким образом: '2014-12-19_d'. Полностью выполнимо в C++ 11 – sehe

+0

Я ошибался: приоритет оператора требует написать ** ['2014- (12-18_d)'] (http://coliru.stacked-crooked.com/a/0ce6359978a03ac3) **. Печально. Теперь мы не можем быть лучше, чем ** ['2014_y-12-18'] (http://coliru.stacked-crooked.com/a/89e94373088e923f) ** Я думаю. – sehe

ответ

2

Я не думаю, что вы хотите:

gregorian::date date1 = 1984; // 2014-12-18 = 2014 - 12 - 18 = 1984 
gregorian::date date2 = 1983; // 2014-12-19 = 2014 - 12 - 19 = 1983 

Постарайся смотрите:

date(greg_year, greg_month, greg_day) 

или

date from_string(std::string) 
2

Конечно, вы должны правильно построить даты , но в противном случае сравнение не является проблемой вообще.

Обратите внимание, что вам нужно day_clock получить currentDate (в противном случае вместо этого вы получите not-a-datetime)

Live On Coliru

#include <boost/date_time/gregorian/greg_date.hpp> 
#include <boost/date_time/gregorian/gregorian_io.hpp> 
#include <iostream> 

using namespace boost; 

int main() { 
    gregorian::date date1(2014, 12, 18); 
    gregorian::date date2(2014, 12, 19); 

    std::cout << date1 << ", " << date2 << "\n"; 
    (date1 < date2 ? date1 : date2) = gregorian::day_clock::local_day(); 
    std::cout << date1 << ", " << date2 << "\n"; 
} 

Это заменяет самое низкое значение с текущей датой, печатью

2014-Dec-18, 2014-Dec-19 
2014-Dec-19, 2014-Dec-19 
Смежные вопросы