
2011/1/5 John Rocha <jrr@cisco.com>:
Thank you for the tips on the interval library.
Hi John, thank you for looking at Boost.Icl and for sharing your question. It helped me to spot a flaw in the interoperability between Boost.Icl and Boost.DateTime, so I could fix it before boost 1.46. is released :)
Unfortunately this doesn't achieve what i want. This will deliver the "same" results as the contains() member from the time_period class. The underlying problem is that the reference points are specific instances of time. A ptime isn't just say one o'clock (1:00). A ptime is actually 1:00 on a specific day.
As Igor pointed out, the kind of time that you are looking for is probably boost::posix_time::time_duration. While posix_time::ptime is related to a fixed time origin (1400-Jan-01 00:00:00), the starting point of a time_duration can be chosen or is given by different points in time according to the program logic which it is used in, like in your daily schedules, the beginning 00:00 of some (not a specific) day.
So one could easily make a time range for a single day.
Using Boost.Icl you can do it this way: time_duration start = hours(8) + minutes(30); time_duration stop = hours(17) + minutes(15); icl::interval<time_duration>::type working_hours = icl::interval<time_duration>::right_open(start, stop); cout << "working_hours: " << working_hours << endl; As mentioned above I spotted that boost::posix_time::time_duration lacks an in/decrement operator ++/-- that is required for interval containers. Operator ++ increments an integral type on its least steppable unit, also called "tick" in the field of time types. Unlike the new Boost.Chrono duration type, time_duration from Boost.DateTime does not implement this operator so I added adapter code to boost/icl/ptime.hpp. [BTW may be it is time to fix this in Boost.DateTime directly so DateTime and Chrono "tick in the same way".] I order to use that code you can patch your version of the Icl replacing boost/icl/ptime.hpp with the latest version of that file from the trunk. http://svn.boost.org/svn/boost/trunk/boost/icl/ptime.hpp Or you get the current version from the Boost trunk via SVN all together. http://svn.boost.org/svn/boost/trunk/boost/icl/
I was hoping for an easy way to have a time range for any day, or for a range of days (8:00 - 5:00 M-F).
Should be possible with icl::interval<time_duration> in different ways.
I have ideas on how to extend the classes to achieve this. However, I was hoping this already existed.
Still, I appreciate the pointer to the interval class/library, I can envision usages for this in other areas of our code already.
That's nice to hear. I'd be happy if the Icl is useful for you. Best regards, Joachim -- Interval Container Library [Boost.Icl] http://www.joachim-faulhaber.de