Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of boost. Click here for the latest Boost documentation.

Class template period

boost::date_time::period — Provides generalized period type useful in date-time systems.


template<typename point_rep, typename duration_rep> 
class period {
// types
typedef point_rep point_type;
typedef duration_rep duration_type;

// construct/copy/destruct
period(point_rep, point_rep);
period(point_rep, duration_rep);

// public member functions
point_rep begin() const;
point_rep end() const;
point_rep last() const;
duration_rep length() const;
bool is_null() const;
bool operator==(const period &) const;
bool operator<(const period &) const;
void shift(const duration_rep &) ;
bool contains(const point_rep &) const;
bool contains(const period &) const;
bool intersects(const period &) const;
bool is_adjacent(const period &) const;
bool is_before(const point_rep &) const;
bool is_after(const point_rep &) const;
period intersection(const period &) const;
period merge(const period &) const;
period span(const period &) const;


This template uses a class to represent a time point within the period and another class to represent a duration. As a result, this class is not appropriate for use when the number and duration representation are the same (eg: in the regular number domain).

A period can be specified by providing either the begining point and a duration or the begining point and the end point( end is NOT part of the period but 1 unit past it. A period will be "invalid" if either end_point <= begin_point or the given duration is <= 0. Any valid period will return false for is_null().

Zero length periods are also considered invalid. Zero length periods are periods where the begining and end points are the same, or, the given duration is zero. For a zero length period, the last point will be one unit less than the begining point.

In the case that the begin and last are the same, the period has a length of one unit.

The best way to handle periods is usually to provide a begining point and a duration. So, day1 + 7 days is a week period which includes all of the first day and 6 more days (eg: Sun to Sat).

period construct/copy/destruct

  1. period(point_rep first_point, point_rep end_point);

    If end <= begin then the period will be invalid

  2. period(point_rep first_point, duration_rep len);

    If len is <= 0 then the period will be invalid

period public member functions

  1. point_rep begin() const;
  2. point_rep end() const;
  3. point_rep last() const;
  4. duration_rep length() const;
  5. bool is_null() const;
  6. bool operator==(const period & rhs) const;
  7. bool operator<(const period & rhs) const;
  8. void shift(const duration_rep & d) ;
  9. bool contains(const point_rep & point) const;
  10. bool contains(const period & other) const;
  11. bool intersects(const period & other) const;
  12. bool is_adjacent(const period & other) const;
  13. bool is_before(const point_rep & point) const;
  14. bool is_after(const point_rep & point) const;
  15. period intersection(const period & other) const;
  16. period merge(const period & other) const;
  17. period span(const period & other) const;

    Combines two periods and any gap between them such that start = min(p1.start, p2.start) end = max(p1.end , p2.end)

Copyright 2001-2005 CrystalClear Software, Inc