Local Time Period
Introduction --
Header --
Construction --
Accessors --
Operators
Introduction
The class boost::local_time::local_time_period provides direct representation for ranges between two local times. Periods provide the ability to simplify some types of calculations by simplifying the conditional logic of the program.
A period that is created with beginning and end points being equal, or with a duration of zero, is known as a zero length period. Zero length periods are considered invalid (it is perfectly legal to construct an invalid period). For these periods, the last point will always be one unit less that the begin point.
Header#include "boost/date_time/local_time/local_time.hpp" //include all types plus i/o
or
#include "boost/date_time/local_time/local_time_types.hpp" //no i/o just typesConstructionSyntaxDescriptionExamplelocal_time_period(...)
Parameters:
local_date_time beginning
local_date_time end Create a period as [begin, end). If end is <= begin then the period will be defined as invalid.time_zone_ptr
zone(new posix_time_zone("MST-07"));
local_date_time
beg(ptime(date(2005,Jan,1),hours(0)), zone);
local_date_time
end(ptime(date(2005,Feb,1),hours(0)), zone);
// period for the entire month of Jan 2005
local_time_period ltp(beg, end);local_time_period(...)
Parameters:
local_date_time beginning
time_duration lengthCreate a period as [begin, begin+len) where end would be begin+len. If len is <= zero then the period will be defined as invalid.time_zone_ptr
zone(new posix_time_zone("MST-07"));
local_date_time
beg(ptime(date(2005,Jan,1),hours(0)), zone);
// period for the whole day of 2005-Jan-01
local_time_period ltp(beg, hours(24));local_time_period(local_time_period rhs)Copy constructorlocal_time_period ltp1(ltp);AccessorsSyntaxDescriptionExamplelocal_date_time begin()Return first local_date_time of the period.time_zone_ptr
zone(new posix_time_zone("MST-07"));
local_date_time
ldt((ptime(date(2005,Jan,1)),hours(0)), zone);
local_time_period ltp(ldt, hours(2));
ltp.begin(); // => 2005-Jan-01 00:00:00local_date_time last()Return last local_date_time in the periodtime_zone_ptr
zone(new posix_time_zone("MST-07"));
local_date_time
ldt((ptime(date(2005,Jan,1),hours(0))), zone);
local_time_period ltp(ldt, hours(2));
ltp.last(); // => 2005-Jan-01 01:59:59.999999999local_date_time end()Return one past the last in periodtime_zone_ptr
zone(new posix_time_zone("MST-07"));
local_date_time
ldt((ptime(date(2005,Jan,1),hours(0))), zone);
local_time_period ltp(ldt, hours(2));
ltp.end(); // => 2005-Jan-01 02:00:00time_duration length()Return the length of the local_time period.time_zone_ptr
zone(new posix_time_zone("MST-07"));
local_date_time
ldt((ptime(date(2005,Jan,1),hours(0))), zone);
local_time_period ltp(ldt, hours(2));
ltp.length(); // => 02:00:00bool is_null()True if period is not well formed. eg: end less than or equal to begin.time_zone_ptr
zone(new posix_time_zone("MST-07"));
local_date_time
beg((ptime(date(2005,Feb,1),hours(0))), zone);
local_date_time
end((ptime(date(2005,Jan,1),hours(0))), zone);
local_time_period ltp(beg, end);
ltp.is_null(); // => truebool contains(local_date_time)True if local_date_time is within the period. Zero length periods cannot contain any pointstime_zone_ptr
zone(new posix_time_zone("MST-07"));
local_date_time
beg((ptime(date(2005,Jan,1),hours(0))), zone);
local_date_time
end((ptime(date(2005,Feb,1),hours(0))), zone);
local_time_period jan_mst(beg, end);
local_date_time
ldt((ptime(date(2005,Jan,15),hours(12))), zone);
jan_mst.contains(ldt); // => true
local_time_period zero(beg, beg);
zero.contains(beg); // falsebool contains(local_time_period)True if period is within the period// using jan_mst period from previous example
local_date_time
beg((ptime(date(2005,Jan,7),hours(0))), zone);
local_time_period ltp(beg, hours(24));
jan_mst.contains(ltp); // => truebool intersects(local_time_period) True if periods overlap// using jan_mst period from previous example
local_date_time
beg((ptime(date(2005,Jan,7),hours(0))), zone);
local_date_time
end((ptime(date(2005,Feb,7),hours(0))), zone);
local_time_period ltp(beg, end);
jan_mst.intersects(ltp); // => truelocal_time_period intersection(local_time_period)Calculate the intersection of 2 periods. Null if no intersection.// using jan_mst period from previous example
local_date_time
beg((ptime(date(2005,Jan,7),hours(0))), zone);
local_date_time
end((ptime(date(2005,Feb,7),hours(0))), zone);
local_time_period ltp(beg, end);
local_time_period res(jan_mst.intersection(ltp));
// res => 2005-Jan-07 00:00:00 through
// 2005-Jan-31 23:59:59.999999999 (inclusive)local_time_period merge(local_time_period)Returns union of two periods. Null if no intersection.// using jan_mst period from previous example
local_date_time
beg((ptime(date(2005,Jan,7),hours(0))), zone);
local_date_time
end((ptime(date(2005,Feb,7),hours(0))), zone);
local_time_period ltp(beg, end);
local_time_period res(jan_mst.merge(ltp));
// res => 2005-Jan-07 00:00:00 through
// 2005-Feb-06 23:59:59.999999999 (inclusive)local_time_period span(local_time_period)Combines two periods and any gap between them such that begin = min(p1.begin, p2.begin) and end = max(p1.end , p2.end).// using jan_mst period from previous example
local_date_time
beg((ptime(date(2005,Mar,1),hours(0))), zone);
local_date_time
end((ptime(date(2005,Apr,1),hours(0))), zone);
local_time_period mar_mst(beg, end);
local_time_period res(jan_mst.span(mar_mst));
// res => 2005-Jan-01 00:00:00 through
// 2005-Mar-31 23:59:59.999999999 (inclusive)void shift(time_duration)Add duration to both begin and end.local_date_time
beg((ptime(date(2005,Mar,1),hours(0))), zone);
local_date_time
end((ptime(date(2005,Apr,1),hours(0))), zone);
local_time_period mar_mst(beg, end);
mar_mst.shift(hours(48));
// mar_mst => 2005-Mar-03 00:00:00 through
// 2005-Apr-02 23:59:59.999999999 (inclusive)OperatorsSyntaxDescriptionExampleoperator==, operator!=Equality operators. Periods are equal if ltp1.begin == ltp2.begin && ltp1.last == ltp2.lastif (ltp1 == ltp2) {...operator<Ordering with no overlap. True if ltp1.end() less than ltp2.begin()if (ltp1 < ltp2) {...operator>Ordering with no overlap. True if ltp1.begin() greater than ltp2.end()if (ltp1 > ltp2) {... etcoperator<=, operator>=Defined in terms of the other operators.