C ++ date comparison (using boost)

I need to be able to convert and compare dates in C ++. I found that the acceleration library pretty much fits my needs, but I can't get it to work correctly:

// include headers... using namespace boost::posix_time; using namespace boost::gregorian; ptime p1(second_clock::universal_time()); p1 -= weeks(5); // Subtract 5 weeks from p1 using boost... std::string old_date("2011-11-19"); // format:YYYY-MM-DD std:stringstream ss(old_date); ptime p2; p2 << ss; if(p1 <= p2){ // this should not happen in this case (yet it does!) p1 > p2!! } 

Basically, I want to subtract the weeks (or months) of the local date, and then compare the result with the date specified as a string in the format YYYY-MM-DD ...

+4
source share
1 answer

Your language may not have a date value set in the format YYYY-MM-DD. Try setting the input facet format, as in the Format Strings example.

Here is an example showing how to set the input and output string stream formats to "ISO extended":

 #include <iostream> #include <boost/date_time/posix_time/posix_time.hpp> int main() { using namespace boost::gregorian; using namespace boost::posix_time; using namespace std; stringstream ss; /****** format strings ******/ time_facet* output_facet = new time_facet(); time_input_facet* input_facet = new time_input_facet(); ss.imbue(locale(ss.getloc(), output_facet)); ss.imbue(locale(ss.getloc(), input_facet)); output_facet->format(time_facet::iso_time_format_extended_specifier); input_facet->format(time_input_facet::iso_time_format_extended_specifier); ptime t(second_clock::local_time()); ss << t; cout << ss.str() << endl; // 2012-08-03 23:46:38 ss.str("2000-01-31 12:34:56"); ss >> t; assert(t.date().year() == 2000); assert(t.date().month() == 1); assert(t.date().day() == 31); assert(t.time_of_day().hours() == 12); assert(t.time_of_day().minutes() == 34); assert(t.time_of_day().seconds() == 56); } 
+2
source

All Articles