<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" 
"../../../tools/boostbook/dtd/boostbook.dtd">

<!-- Copyright (c) 2001-2005 CrystalClear Software, Inc.
     Subject to the Boost Software License, Version 1.0. 
     (See accompanying file LICENSE_1_0.txt or  http://www.boost.org/LICENSE_1_0.txt)
-->

<section id="date_time.gregorian.gregorian_calendar">
  <title>Gregorian Calendar</title>

  <link linkend="gregcal_intro">Introduction</link> --
  <link linkend="gregcal_header">Header</link> --
  <link linkend="gregcal_functions">Functions</link>

  <anchor id="gregcal_intro" />
  <bridgehead renderas="sect3">Introduction</bridgehead>
  <para>
    The class boost::gregorian::gregorian_calendar implements the functions necessary to create the gregorian date system. It converts to the year-month-day form of a date to a day number representation and back. 
  </para>
  <para>
    For most purposes this class is simply accessed by <link linkend="date_time.gregorian.date_class">gregorian::date</link> and is not used directly by the user. However, there are useful functions that might be of use such as the end_of_month_day function. 
  </para>
  <para>
    The <link linkend="date_time.examples.print_month">print month</link> example demonstrates this. 
  </para>

  <anchor id="gregcal_header" />
  <bridgehead renderas="sect3">Header</bridgehead>
  <para>
    <programlisting>#include "boost/date_time/gregorian/gregorian.hpp" //include all types plus i/o
or
#include "boost/date_time/gregorian/gregorian_types.hpp" //no i/o just types</programlisting>
  </para>

  <anchor id="gregcal_functions" />
  <bridgehead renderas="sect3">Functions</bridgehead>
  <informaltable frame="all">
    <tgroup cols="2">
      <thead>
	<row>
	  <entry valign="top" morerows="1">Syntax</entry>
	  <entry>Description</entry>
	</row>
	<row>
	  <entry>Example</entry>
	</row>
      </thead>
      <tbody>
        <row>
	  <entry valign="top" morerows="1"><screen>static short day_of_week(ymd_type)</screen></entry>
	  <entry>Return the day of the week (0==Sunday, 1==Monday, etc)</entry>
	</row>
	<row>
	  <entry>See also <link linkend="date_time.gregorian.date_class">gregorian::date</link> day_of_week</entry>
        </row>

	<row>
	  <entry valign="top" morerows="1"><screen>static date_int_type day_number(ymd_type)</screen></entry>
	  <entry> Convert a ymd_type into a day number. The day number mapping is implementation defined, however the library implements the 1400-01-01 epoch as follows <screen> date(gregorian_calendar::epoch()).day_number() == 2232400</screen></entry>
	</row>
	<row>
	  <entry></entry>
        </row>
        
	<row>
          <entry valign="top" morerows="1"><screen>static short end_of_month_day(year_type,
                              month_type)</screen></entry>
	  <entry>Given a year and month determine the last day of the month.</entry>
	</row>
	<row>
	  <entry></entry>
        </row>
        
	<row>
	  <entry valign="top" morerows="1"><screen>static ymd_type from_day_number(date_int_type)</screen></entry>
	  <entry> Convert a day number to a ymd struct.</entry>
	</row>
	<row>
	  <entry></entry>
        </row>
        
	<row>
	  <entry valign="top" morerows="1"><screen>static bool is_leap_year(year_type)</screen></entry>
	  <entry>Returns true if specified year is a leap year.</entry>
	</row>
        <row>
          <entry><screen>gregorian_calendar::is_leap_year(2000)
//--> true</screen></entry>
	</row>
      </tbody>
    </tgroup>
  </informaltable>

</section>
