<?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-2004 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.examples.print_month">
  <title>Print Month</title>

  <para>  
    Simple utility to print out days of the month with the days of a month. Demontstrates date iteration (date_time::date_itr).
  </para>
  <programlisting>
    <![CDATA[
  /* This example prints all the dates in a month. It demonstrates
   * the use of iterators as well as functions of the gregorian_calendar
   * 
   * Output:
   * Enter Year: 2002
   * Enter Month(1..12): 2
   * 2002-Feb-01 [Fri]
   * 2002-Feb-02 [Sat]
   * 2002-Feb-03 [Sun]
   * 2002-Feb-04 [Mon]
   * 2002-Feb-05 [Tue]
   * 2002-Feb-06 [Wed]
   * 2002-Feb-07 [Thu]
   */

  #include "boost/date_time/gregorian/gregorian.hpp"
  #include <iostream>

  int
  main()
  {
    std::cout << "Enter Year: ";
    int year, month;
    std::cin >> year;
    std::cout << "Enter Month(1..12): ";
    std::cin >> month;

    using namespace boost::gregorian;
    try {
      //Use the calendar to get the last day of the month
      int eom_day = gregorian_calendar::end_of_month_day(year,month);
      date endOfMonth(year,month,eom_day);

      //construct an iterator starting with firt day of the month
      day_iterator ditr(date(year,month,1));
      //loop thru the days and print each one
      for (; ditr <= endOfMonth; ++ditr) {
  #if defined(BOOST_DATE_TIME_NO_LOCALE) 
        std::cout << to_simple_string(*ditr) << " ["
  #else
        std::cout << *ditr << " ["
  #endif
                  << ditr->day_of_week() << "]"
                  << std::endl; 
      }
    }
    catch(std::exception& e) {

      std::cout << "Error bad date, check your entry: \n"
                << "  Details: " << e.what() << std::endl;
    }
    return 0;
  }

    ]]>
  </programlisting>
</section>
