<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>N2058=06-0128 Proposed Text for Proposal to add Date-Time to the Standard
  Library 1.0</title><meta name="generator" content="DocBook XSL Stylesheets V1.68.1">


<style type="text/css">
/*=============================================================================
    Copyright (c) 2002 2004 Joel de Guzman
    http://spirit.sourceforge.net/

    Use, modification and distribution is subject to the Boost Software
    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
    http://www.boost.org/LICENSE_1_0.txt)
=============================================================================*/

/* CSS based on w3c documentation which I like a lot, and the classic Spirit
documentation. */

/* Body defaults */
body 
{
    padding: 2em 1em 2em 1em;
    margin: 1em 1em 1em 1em;
    font-family: sans-serif;
}

/* Paragraphs */
p 
{
    text-align: justify;
}

pre.synopsis
{
    margin: 1pc 4% 0pc 4%;
    padding: 0.5pc 0.5pc 0.5pc 0.5pc;
}

/* Headings */
h1, h2, h3, h4, h5, h6 { text-align: left; margin-top: 2pc; }
h1 { font: 160% sans-serif }
h2 { font: bold 140% sans-serif }
h3 { font: bold 120% sans-serif }
h4 { font: 110% sans-serif }
h5 { font: italic 100% sans-serif }
h6 { font: italic 100% sans-serif }

/* Unordered lists */
ul 
{
    text-align: justify;
}

/* Links */
a
{
    text-decoration: none; /* no underline */
}

a:hover
{
    text-decoration: underline;
}

/* Top page title */
title, h1.title, h2.title, h3.title,
       h4.title, h5.title, h6.title,
       .refentrytitle
{
    font-weight:   bold;
    font-size:     2pc;
    margin-bottom: 1pc;
}

/* Spirit style navigation */
.spirit-nav
{
    text-align: right;
}

.spirit-nav a
{
    color: white;
    padding-left: 0.5em;
}

.spirit-nav img
{
    border-width: 0px;
}

/* Program listing box */
.programlisting, .screen
{
    display: block;
//    margin-left:  4%;
    margin-right: 4%;
    padding: 0.5pc 0.5pc 0.5pc 0.5pc;
}

/* Table of contents */
.toc
{
   margin: 1pc 4% 0pc 4%;
   padding: 0.5pc 0.5pc 0.5pc 0.5pc;
}

.boost-toc
{
   float:   right;
   padding: 0.5pc;
}

/* Tables */
.table-title, div.table p.title
{
    margin-left: 4%;
    padding-right: 0.5em; 
    padding-left: 0.5em;
    font-size: 120%;
}

.informaltable table, .table table
{
    width: 92%;
    margin-left: 4%;
    margin-right: 4%;
}

div.informaltable table, div.table table
{
    padding: 4px 4px 4px 4px;
}

div.informaltable table tr td, div.table table tr td
{
    padding: 0.5em 0.5em 0.5em 0.5em;
    text-align: justify;
}

div.informaltable table tr th, div.table table tr th
{
    padding: 0.5em 0.5em 0.5em 0.5em;
    border: 1pt solid white;
}

/* inlined images */
.inlinemediaobject
{
    padding: 0.5em 0.5em 0.5em 0.5em;
}

/* tone down the title of Parameter lists */
div.variablelist p.title
{
    font-weight: bold;
    font-size: 100%;
    text-align: left;
}

/* tabularize parameter lists */
div.variablelist dl dt
{
    float: left;
    clear: left;
    display: block;
    font-style: italic;
}

div.variablelist dl dd
{
    display: block;
    clear:   right;
    padding-left: 8pc;
}

/* title of books and articles in bibliographies */
span.title
{
    font-style: italic;
}

div.tip, div.note, div.warning, div.pre
{
    padding: 0.5em 0.5em 0.5em 0.5em;
    border: 1pt solid white;
}

div.tip .title, div.note .title, div.warning .title
{
    font: bold 100% sans-serif;
    margin-top: 0pc;
}

div.tip .title:before
{
    content: url(images/tip.png) " ";
}

/* div.note .title:before */
/* { */
/*     content: url(images/note.png) " "; */
/* } */

div.warning .title:before
{
    content: url(images/caution.png) " ";
}

    /* Was under screen previously */
    /* Syntax Highlighting */
    //.keyword        { color: #0000AA; font-weight: bold; }
    .identifier     {}
    .special        { color: #707070; }
    .preprocessor   { color: #402080; font-weight: bold; }
    .char           { color: teal; }
    .comment        { color: #800000; }
    .string         { color: teal; }
    .number         { color: teal; }
    .copyright      { color: #666666; font-size: small; }
    .white_bkd      { background-color: #FFFFFF; }
    .dk_grey_bkd    { background-color: #999999; }


@media screen
{
    a
    {
        color: #005a9c;
    }

    a:visited
    {
        color: #9c5a9c;
    }


    pre.synopsis
    {
        background-color: #f3f3f3;
    }

    .programlisting, .screen
    {
//        background-color: red;
        background-color: #FFFFF0; //ivory
//        background-color: #F0FFFF; //azure1
//        background-color: #FAFAD2;
      // background-color: #FFE4B5 //moccasin
     //   background-color: #FAF0E6 //linen
      //background-color: #EEF5DE //seashell2
       //FAFAD2 light golden rod
       //   background-color: #FFFFCC; //yellow
      // background-color: #f3f3f3;
    }

    /* Table of contents */
    .toc
    {
        background-color: #f3f3f3;
    }

    div.informaltable table tr td, div.table table tr td
    {
        background-color: #F3F3F3;
        border: 1pt solid white;
    }

    div.informaltable table tr th, div.table table tr th
    {
        background-color: #e4e4e4;
    }

    div.tip, div.note, div.warning
    {
        background-color: #F3F3F3;
    }

    span.highlight
    {
        color: #00A000;
    }
}

@media print
{
    a
    {
        color: black;
    }

    a:visited
    {
        color: black;
    }

    .spirit-nav
    {
        display: none;
    }

    /* Syntax Highlighting */
    .keyword
    {
        font-weight: bold;
    }

    pre.synopsis
    {
        border: 1px solid gray;
    }

    .programlisting, .screen
    {
        border: 1px solid gray;
    }

    /* Table of contents */
    .toc
    {
        border: 1px solid gray;
    }

    .informaltable table, .table table
    {
        border: 1px solid gray;
        border-collapse: collapse;
    }

    div.informaltable table tr td, div.table table tr td
    {
        border: 1px solid gray;
    }

    div.informaltable table tr th, div.table table tr th
    {
        border: 1px solid gray;
    }

    div.tip, div.note, div.warning
    {
        border: 1px solid gray;
    }

    span.highlight
    {
        font-weight: bold;
    }
}

</style>


</head>



<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library"></a>N2058=06-0128 Proposed Text for Proposal to add Date-Time to the Standard
  Library 1.0</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jeff </span> <span class="surname">Garland (jeff-at-crystalclearsoftware.com)</span></h3></div></div><div><p class="copyright">Copyright  2006 CrystalClear Software, Inc -- Last Modified: Date:
      2006-09-11 07:15:22 </p></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.detailed_table_of_contents">Detailed Table of Contents</a></span></dt><dt><span class="section"><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.introduction">Introduction</a></span></dt><dt><span class="section"><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text">Proposed Text</a></span></dt><dt><span class="section"><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.acknowledgments">Acknowledgments</a></span></dt><dt><span class="section"><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.references">References</a></span></dt></dl></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.detailed_table_of_contents"></a>Detailed Table of Contents</h2></div></div></div><div class="itemizedlist"><ul type="disc"><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text" title="Proposed Text">Proposed
        Text</a><div class="itemizedlist"><ul type="circle"><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.requirements">Requirements</a><div class="itemizedlist"><ul type="square"><li>
                [Requirements on Programs]
              </li><li>
                [Requirements on Implemenations]
              </li></ul></div></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.chapter__tbs____datetime_library">Chapter
            (tbs) - Datetime Library</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.fw_1_normative_references">FW.1
            Normative References</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.fw_2_definitions">FW.2
            Definitions</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.header__lt_datetime_gt__synopsis">Header
            datetime Synopsis</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.core_classes">Core
            Classes</a><div class="itemizedlist"><ul type="square"><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_calendar">Template
                Class basic_calendar</a><div class="itemizedlist"><ul type="disc"><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_calendar">basic_calendar
                    calculation functions</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_calendar">basic_calendar
                    week related functions</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_calendar">basic_calendar
                    date_int_type template parameter</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_calendar">basic_calendar
                    ymd template parameter</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_calendar">basic_calendar
                    typedefs</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_calendar">basic_calendar
                    julian calendar functions</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_calendar">basic_calendar
                    traits functions</a></li></ul></div></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date">Template
                Class basic_date</a><div class="itemizedlist"><ul type="disc"><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date">Template
                    Class basic_date - typedefs</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date">Template
                    Class basic_date - constructors</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date">Template
                    Class basic_date - Basic accessors</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date">Template
                    Class basic_date - comparison operators</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date">Template
                    Class basic_date - arithmetic operators</a></li></ul></div></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.date_construction_exceptions">Date
                Construction Exceptions</a><div class="itemizedlist"><ul type="disc"><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_datetime_error">Class
                    datetime_error</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_bad_day_of_month">Class
                    bad_day_of_month</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_bad_day_of_year">Class
                    bad_day_of_year</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_bad_week_of_year">Class
                    bad_week_of_year</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_bad_year">Class
                    bad_year</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_bad_month">Class
                    bad_month</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_bad_weekday">Class
                    bad_weekday</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_bad_date_conversion">Class
                    bad_date_conversion</a></li></ul></div></li><li>
                [Template class basic_time_duration]
                <div class="itemizedlist"><ul type="disc"><li>
                    [Template class basic_time_duration - constructors]
                  </li><li>
                    [Template class basic_time_duration - arithmetic operators]
                  </li></ul></div></li><li>
                [Template Class basic_date_time]
                <div class="itemizedlist"><ul type="disc"><li>
                    [Template Class basic_date_time - typedefs]
                  </li><li>
                    [Template Class basic_date_time - constructors]
                  </li><li>
                    [Template Class basic_date_time - comparison operators]
                  </li><li>
                    [Template Class basic_date_time - arithmetic operators]
                  </li></ul></div></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.basic_time_period">Basic
                Time Period</a><div class="itemizedlist"><ul type="disc"><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_time_period___template_parameter_types">Template
                    class basic_time_period - template parameter types</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_time_period___constructors">Template
                    class basic_time_period - constructors</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_time_period___basic_accessors">Template
                    class basic_time_period - basic accessors</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_time_period___specialized_accessors">Template
                    class basic_time_period - specialized accessors</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_time_period___constructors">Template
                    class basic_time_period - comparison operators</a></li></ul></div></li></ul></div></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.concrete_temporal_types">Concrete
            Temporal Types</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.additional_types">Additional
            Types</a><div class="itemizedlist"><ul type="square"><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.time_zone_types">Time
                Zone Types</a><div class="itemizedlist"><ul type="disc"><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_time_zone">template
                    class time_zone</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_posix_time_zone">template
                    class posix_time_zone</a></li></ul></div></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.clock_types">Clock
                Types</a><div class="itemizedlist"><ul type="disc"><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_day_clock">template
                    class day_clock</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_microsecond_clock">template
                    class micro_second_clock</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_second_clock">template
                    class second_clock</a></li></ul></div></li></ul></div></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.date_time_input_output">Date
            Time Input-Output</a><div class="itemizedlist"><ul type="square"><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.date_time_input_output">Input-Output
                Formatting Strings</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.date_time_input_output">Input-Output
                Classes and Functions</a><div class="itemizedlist"><ul type="disc"><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_date_output_facet">template
                    class date_output_facet</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_date_input_facet">template
                    class date_input_facet</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_time_output_facet">template
                    class time_output_facet</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_time_input_facet">template
                    class time_input_facet</a></li></ul></div></li></ul></div></li></ul></div></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.acknowledgments" title="Acknowledgments">Acknowledgments</a></li><li><a href="#n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.references" title="References">References</a></li></ul></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.introduction"></a>Introduction</h2></div></div></div><p>
      Note: This draft is only partially complete and will need to be updated. However,
      it does show the scope and extent of the proposal.
    </p><p>
      This paper will focus on the details of the proposal to add a date-time library
      to the c++ standard. Please see <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1900.pdf" target="_top">N1900=05-0160
      Proposal to Add Date-Time to the C++ Standard Library</a> for an overview
      of the motivations, design, and major design decisions.
    </p><p>
      The author fully expects the Library Working Group to have many suggestions
      and refinements since this is a lengthy proposal and this is the authors first
      experience writing a standards proposal.
    </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text"></a>Proposed Text</h2></div></div></div><p>
      Text in notes is meant as explanatory information about the proposal. It is
      not to be added to the TR.
    </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
        This is an example of a note that is NOT part of the TR text.
      </p></div><p>
      All dates and times in this proposal are supplied in ISO extended form unless
      otherwise specified. Specifically year-month-day hour:minute:second.fractional_seconds.
      So the 15th day of September 2006 is specified as <code class="code"><span class="number">2006</span><span class="special">-</span><span class="number">09</span><span class="special">-</span><span class="number">15</span></code>.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.chapter__tbs____datetime_library"></a><h2><a name="id265840"></a>
      Chapter (tbs) - Datetime Library
    </h2><p>
      This clause contains components that C++ programs may use to manipulate dates,
      times, and timezones.
    </p><p>
      Unless otherwise specified, all components described in this clause are declared
      in namespace <code class="code"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tr2</span><span class="special">::</span><span class="identifier">datetime</span></code>.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.requirements"></a><h2><a name="id265886"></a>
      Requirements
    </h2><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.requirements_on_programs"></a><h3><a name="id265900"></a>
      Requirements on Programs
    </h3><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.requirements_on_implemenations"></a><h3><a name="id265913"></a>
      Requirements on Implemenations
    </h3><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.fw_1_normative_references"></a><h2><a name="id265926"></a>
      FW.1 Normative References
    </h2><p>
      <a href="http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=40874" target="_top">ISO
      8601:2004 Data elements and interchange formats -- Information interchange
      -- Representation of dates and times</a>
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.fw_2_definitions"></a><h2><a name="id265949"></a>
      FW.2 Definitions
    </h2><p>
      Time Point: An instant in the time continuum (dimensionless).
    </p><p>
      Time Duration: A length of time unattached to a any time point. Time durations
      have an assigned maxiumum resolution (eg: 1 second).
    </p><p>
      Time Period: A length of time between two time points
    </p><p>
      Epoch: The start of a given time scale. For time_t the epoch is 1970-01-01
      00:00:00. In this text the epoch will normally be called the 'minimum date'
      or 'minimum time'.
    </p><p>
      Maximum Date/Time: The maxiumum representable time in a time system implementation.
      For time_t the maximum representable time is January 19, 2038 03:14:08.
    </p><p>
      Valid Date/Time: A date or time that can be represented within the range of
      a time system with a defined epoch, resolution, and maximum date/time.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.header__lt_datetime_gt__synopsis"></a><h2><a name="id265989"></a>
      Header &lt;datetime&gt; Synopsis
    </h2><p>
      The header &lt;datetime&gt; defines a basic date, basic duration, and basic
      period class templates.
    </p><p>
      The header &lt;datetime&gt; defines a basic gregorian calendar templates that
      implements core calendric calcuations.
    </p><p>
      The header &lt;datetime&gt; defines a series of typedefs to provide date and
      other time types.
    </p><p>
      The header &lt;datetime&gt; defines a timezone classes to provide for local
      time adjustment calculations input and output.
    </p><p>
      The header &lt;datetime&gt; defines a input output functions and facets for
      the date time types.
    </p><p>
      The header &lt;datetime&gt; defines a set of exception classes used to signal
      errors in construction of incorrect dates and times.
    </p><pre class="programlisting">
<span class="keyword">namespace</span> <span class="identifier">std</span> 
<span class="special">{</span>
  <span class="keyword">namespace</span> <span class="identifier">tr2</span> 
  <span class="special">{</span>
    <span class="keyword">namespace</span> <span class="identifier">datetime</span> 
    <span class="special">{</span>

      <span class="keyword">enum</span> <span class="identifier">special_values</span> <span class="special">{</span><span class="identifier">negative_infinity</span><span class="special">,</span> <span class="identifier">positive_infinity</span><span class="special">,</span> <span class="identifier">not_a_date_time</span><span class="special">,</span>
                           <span class="identifier">max_date_time</span><span class="special">,</span> <span class="identifier">min_date_time</span><span class="special">,</span> <span class="identifier">not_special</span> <span class="special">};</span>

      <span class="keyword">enum</span> <span class="identifier">week_of_month</span> <span class="special">{</span><span class="number">1</span><span class="identifier">st_week</span> <span class="special">=</span> <span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="identifier">nd_week</span><span class="special">,</span> <span class="number">3</span><span class="identifier">rd_week</span><span class="special">,</span> <span class="number">4</span><span class="identifier">th_week</span><span class="special">,</span> 
                          <span class="number">5</span><span class="identifier">th_week</span><span class="special">,</span> <span class="identifier">last_week_of_month</span><span class="special">};</span>

      <span class="comment">//corresponds to iso 8601 day of the week numbering
</span>      <span class="keyword">enum</span> <span class="identifier">day_of_the_week</span> <span class="special">{</span><span class="identifier">sunday</span><span class="special">=</span><span class="number">1</span><span class="special">,</span> <span class="identifier">monday</span><span class="special">,</span> <span class="identifier">tuesday</span><span class="special">,</span> <span class="identifier">wednesday</span><span class="special">,</span> <span class="identifier">thursday</span><span class="special">,</span> <span class="identifier">friday</span><span class="special">,</span> <span class="identifier">saturday</span> <span class="special">}</span>

      <span class="keyword">struct</span> <span class="identifier">year_month_day</span><span class="special">;</span>

      <span class="comment">//basic class for time durations
</span>      <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">duration_rep_traits</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">basic_duration</span><span class="special">;</span>

      <span class="comment">//common calendar functions.
</span>      <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ymd_type_</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">date_int_type_</span><span class="special">&gt;</span>
      <span class="keyword">class</span> <span class="identifier">basic_calendar</span><span class="special">;</span>

      <span class="comment">//classes and functions for date
</span>      <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">date_impl</span><span class="special">&gt;</span> 
      <span class="keyword">class</span> <span class="identifier">basic_date</span><span class="special">;</span>


      <span class="comment">//Exception classes for construction of dates
</span>      <span class="keyword">class</span> <span class="identifier">bad_date_error</span><span class="special">;</span>   <span class="comment">// public std::runtime_error
</span>      <span class="keyword">class</span> <span class="identifier">bad_day_of_month</span><span class="special">;</span> <span class="comment">// public bad_date_error
</span>      <span class="keyword">class</span> <span class="identifier">bad_day_of_year</span><span class="special">;</span>  <span class="comment">// public bad_date_error
</span>      <span class="keyword">class</span> <span class="identifier">bad_week_of_year</span>  <span class="comment">// public bad_date_error
</span>      <span class="keyword">class</span> <span class="identifier">bad_year</span><span class="special">;</span>         <span class="comment">// public bad_date_error
</span>      <span class="keyword">class</span> <span class="identifier">bad_month</span><span class="special">;</span>        <span class="comment">// public bad_date_error
</span>      <span class="keyword">class</span> <span class="identifier">bad_weekday</span><span class="special">;</span>      <span class="comment">// public bad_date_error
</span>      <span class="keyword">class</span> <span class="identifier">bad_date_conversion</span><span class="special">;</span> <span class="comment">//public bad_date_error
</span>
      <span class="comment">//high resolution durations
</span>      <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">time_impl</span><span class="special">&gt;</span>
      <span class="keyword">class</span> <span class="identifier">basic_time_duration</span><span class="special">;</span>

      <span class="comment">//Classes and functions for time representation
</span>      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">time_impl</span><span class="special">&gt;</span>
      <span class="keyword">class</span> <span class="identifier">basic_date_time</span><span class="special">;</span>

      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">TraitsT</span><span class="special">&gt;</span>
      <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span>
      <span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">basic_date_time</span><span class="special">&amp;);</span>

      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">&gt;</span>
      <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span>
      <span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span> <span class="identifier">is</span><span class="special">,</span> <span class="identifier">basic_date_time</span><span class="special">&amp;);</span>

      <span class="comment">//Classes and functions for time periods
</span>      <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">point_rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">duration_rep</span><span class="special">&gt;</span>
      <span class="keyword">class</span> <span class="identifier">basic_time_period</span><span class="special">;</span>

      <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CharT</span> <span class="special">=</span> <span class="keyword">char</span><span class="special">&gt;</span>
      <span class="keyword">class</span> <span class="identifier">time_zone_base</span><span class="special">;</span>

      <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span> <span class="special">=</span> <span class="keyword">char</span><span class="special">&gt;</span>
      <span class="keyword">class</span> <span class="identifier">time_zone_names_base</span><span class="special">;</span>

      <span class="comment">//Timezone type used for user customization (TODO????)
</span>      <span class="keyword">class</span> <span class="identifier">time_zone</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">time_zone_base</span><span class="special">&lt;</span><span class="identifier">date_time</span><span class="special">&gt;;</span>

      <span class="comment">//Exception class for conversions of local time values
</span>      <span class="keyword">class</span> <span class="identifier">invalid_time_label</span><span class="special">;</span>  <span class="comment">// public std::logic_error
</span>
      <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">charT</span><span class="special">=</span><span class="keyword">char</span><span class="special">&gt;</span>
      <span class="keyword">class</span> <span class="identifier">posix_time_zone</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">time_zone</span><span class="special">&lt;</span><span class="identifier">time_type</span><span class="special">,</span> <span class="identifier">charT</span><span class="special">&gt;;</span>

      <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">date_type</span><span class="special">&gt;</span>
      <span class="keyword">class</span> <span class="identifier">day_clock</span><span class="special">;</span>

      <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">time_type</span><span class="special">&gt;</span>
      <span class="keyword">class</span> <span class="identifier">second_clock</span><span class="special">;</span>

      <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">time_type</span><span class="special">&gt;</span>
      <span class="keyword">class</span> <span class="identifier">microsecond_clock</span><span class="special">;</span>

      <span class="comment">//...indicates implementation defined
</span>      <span class="keyword">typedef</span> <span class="identifier">basic_date</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>                  <span class="identifier">date</span><span class="special">;</span>
      <span class="keyword">typedef</span> <span class="identifier">basic_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>              <span class="identifier">days</span><span class="special">;</span>
      <span class="keyword">typedef</span> <span class="identifier">basic_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>              <span class="identifier">weeks</span><span class="special">;</span>
      <span class="keyword">typedef</span> <span class="identifier">basic_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>              <span class="identifier">months</span><span class="special">;</span>
      <span class="keyword">typedef</span> <span class="identifier">basic_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>              <span class="identifier">years</span><span class="special">;</span>
      <span class="keyword">typedef</span> <span class="identifier">basic_time_period</span><span class="special">&lt;</span><span class="identifier">date</span><span class="special">,</span> <span class="identifier">days</span><span class="special">&gt;</span>    <span class="identifier">date_period</span><span class="special">;</span>

      <span class="keyword">typedef</span> <span class="identifier">basic_date_time</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>             <span class="identifier">date_time</span><span class="special">;</span>
      <span class="keyword">typedef</span> <span class="identifier">basic_time_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>         <span class="identifier">hours</span><span class="special">;</span>
      <span class="keyword">typedef</span> <span class="identifier">basic_time_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>         <span class="identifier">minutes</span><span class="special">;</span>
      <span class="keyword">typedef</span> <span class="identifier">basic_time_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>         <span class="identifier">seconds</span><span class="special">;</span>
      <span class="keyword">typedef</span> <span class="identifier">basic_time_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>         <span class="identifier">milliseconds</span><span class="special">;</span>
      <span class="keyword">typedef</span> <span class="identifier">basic_time_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>         <span class="identifier">microseconds</span><span class="special">;</span>
      <span class="keyword">typedef</span> <span class="identifier">basic_time_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>         <span class="identifier">nanoseconds</span><span class="special">;</span>

  
      <span class="comment">//io stuff
</span>      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">TraitsT</span><span class="special">&gt;</span>
      <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span>
      <span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="identifier">basic_duration</span><span class="special">&amp;);</span>

      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">&gt;</span>
      <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span>
      <span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span> <span class="identifier">is</span><span class="special">,</span>  <span class="identifier">basic_duration</span><span class="special">&amp;);</span>

      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">TraitsT</span><span class="special">&gt;</span>
      <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span>
      <span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;);</span>

      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">&gt;</span>
      <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span>
      <span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span> <span class="identifier">is</span><span class="special">,</span> <span class="identifier">basic_date</span><span class="special">&amp;);</span>

      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">TraitsT</span><span class="special">&gt;</span>
      <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span>
      <span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">basic_time_duration</span><span class="special">&amp;);</span>

      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">&gt;</span>
      <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span>
      <span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span> <span class="identifier">is</span><span class="special">,</span> <span class="identifier">basic_time_duration</span><span class="special">&amp;);</span>


      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">TraitsT</span><span class="special">&gt;</span>
      <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span>
      <span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">basic_time_period</span><span class="special">&amp;);</span>

      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">&gt;</span>
      <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span>
      <span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span> <span class="identifier">is</span><span class="special">,</span> <span class="identifier">basic_time_period</span><span class="special">&amp;);</span>

      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">TraitsT</span><span class="special">&gt;</span>
      <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span>
      <span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="identifier">posix_time_zone</span><span class="special">&amp;);</span>

      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">&gt;</span>
      <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span>
      <span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span> <span class="identifier">is</span><span class="special">,</span>  <span class="identifier">posix_time_zone</span><span class="special">&amp;);</span>

      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">date_type</span><span class="special">,</span>
                <span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> 
                <span class="keyword">class</span> <span class="identifier">OutItrT</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostreambuf_iterator</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">char_traits</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span>
      <span class="keyword">class</span> <span class="identifier">date_facet</span><span class="special">;</span> <span class="comment">// : public std::locale::facet
</span>
      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">date_type</span><span class="special">,</span>
                <span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> 
                <span class="keyword">class</span> <span class="identifier">InItrT</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">istreambuf_iterator</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">char_traits</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span>
      <span class="keyword">class</span> <span class="identifier">date_input_facet</span><span class="special">;</span> <span class="comment">// public std::locale::facet {
</span>

      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">time_type</span><span class="special">,</span>
                <span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> 
                <span class="keyword">class</span> <span class="identifier">OutItrT</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostreambuf_iterator</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">char_traits</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span>
      <span class="keyword">class</span> <span class="identifier">time_facet</span><span class="special">;</span>

      <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">time_type</span><span class="special">,</span>
                <span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> 
                <span class="keyword">class</span> <span class="identifier">InItrT</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">istreambuf_iterator</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">char_traits</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span>
      <span class="keyword">class</span> <span class="identifier">time_input_facet</span><span class="special">;</span>


    <span class="special">}</span>  <span class="comment">// namespace datetime 
</span>  <span class="special">}</span>  <span class="comment">//namespace tr2
</span><span class="special">}</span>  <span class="comment">//namespace std
</span></pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.core_classes"></a><h2><a name="id270205"></a>
      Core Classes
    </h2><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_calendar"></a><h3><a name="id270218"></a>
      Template Class basic_calendar
    </h3><p>
      This is a parameterized implementation of a proleptic Gregorian, iso, and julian
      calendar functions. These functions allow for the calculation of various date-related
      values including the conversion of values such as the 'year-month-day' into
      an integer value that can be used to represent a date.
    </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
        All the methods of this class are static functions, so the intent is to never
        create instances of this class.
      </p></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
        This class is parameterized to allow for alternate date time implemenations
        to utilize these functions as part of an implementation.
      </p></div><pre class="programlisting">
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ymd_type_</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">date_int_type_</span><span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">basic_calendar</span> <span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="identifier">typdef</span>  <span class="keyword">typename</span> <span class="identifier">ymd_type_</span><span class="special">::</span><span class="identifier">weekday_type</span> <span class="identifier">weekday_type</span><span class="special">;</span> <span class="comment">//TODO change to traits?
</span>  <span class="keyword">typedef</span> <span class="identifier">ymd_type_</span>                        <span class="identifier">ymd_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">ymd_type</span><span class="special">::</span><span class="identifier">month_type</span>    <span class="identifier">month_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">ymd_type</span><span class="special">::</span><span class="identifier">day_type</span>      <span class="identifier">day_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">ymd_type</span><span class="special">::</span><span class="identifier">year_type</span>     <span class="identifier">year_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">date_int_type_</span>                   <span class="identifier">date_int_type</span><span class="special">;</span>


  <span class="comment">//iso/gregorian related functions
</span>  <span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <span class="identifier">day_of_week</span>    <span class="special">(</span><span class="keyword">const</span> <span class="identifier">ymd_type</span><span class="special">&amp;</span> <span class="identifier">ymd</span><span class="special">);</span>
  <span class="keyword">static</span> <span class="keyword">int</span>            <span class="identifier">week_number</span>    <span class="special">(</span><span class="keyword">const</span> <span class="identifier">ymd_type</span><span class="special">&amp;</span> <span class="identifier">ymd</span><span class="special">);</span>
  <span class="keyword">static</span> <span class="keyword">bool</span>           <span class="identifier">is_leap_year</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">);</span>
  <span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <span class="identifier">last_day_of_month</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">month_type</span> <span class="identifier">m</span><span class="special">);</span>

  <span class="comment">//TODO document or remove
</span>  <span class="keyword">static</span> <span class="keyword">int</span>            <span class="identifier">days_after_weekday</span><span class="special">(</span><span class="identifier">date_int_type</span> <span class="identifier">day_number</span><span class="special">,</span> <span class="identifier">weekday_type</span><span class="special">);</span>
  <span class="keyword">static</span> <span class="keyword">int</span>            <span class="identifier">days_before_weekday</span><span class="special">(</span><span class="identifier">date_int_type</span> <span class="identifier">day_number</span><span class="special">,</span> <span class="identifier">weekday_type</span><span class="special">);</span>
  

  <span class="keyword">static</span> <span class="identifier">date_int_type</span>  <span class="identifier">day_number</span>     <span class="special">(</span><span class="keyword">const</span> <span class="identifier">ymd_type</span><span class="special">&amp;</span> <span class="identifier">ymd</span><span class="special">);</span>
  <span class="keyword">static</span> <span class="identifier">ymd_type</span>       <span class="identifier">from_day_number</span><span class="special">(</span><span class="identifier">date_int_type</span><span class="special">);</span>

  <span class="comment">//julian calendar functions
</span>  <span class="keyword">static</span> <span class="identifier">date_int_type</span>  <span class="identifier">julian_day_number</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">ymd_type</span><span class="special">&amp;</span> <span class="identifier">ymd</span><span class="special">);</span>
  <span class="keyword">static</span> <span class="keyword">long</span>           <span class="identifier">modjulian_day_number</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">ymd_type</span><span class="special">&amp;</span> <span class="identifier">ymd</span><span class="special">);</span>
  <span class="keyword">static</span> <span class="identifier">ymd_type</span>       <span class="identifier">from_julian_day_number</span><span class="special">(</span><span class="keyword">long</span> <span class="identifier">julian_day_number</span><span class="special">);</span>
  <span class="keyword">static</span> <span class="identifier">ymd_type</span>       <span class="identifier">from_modjulian_day_number</span><span class="special">(</span><span class="keyword">long</span> <span class="identifier">modjulian_day</span><span class="special">);</span>

  <span class="comment">//calendar traits functions
</span>  <span class="keyword">static</span> <span class="identifier">ymd_type</span>       <span class="identifier">min_ymd</span><span class="special">();</span>
  <span class="keyword">static</span> <span class="identifier">ymd_type</span>       <span class="identifier">max_ymd</span><span class="special">();</span>
  <span class="keyword">static</span> <span class="identifier">date_int_type</span>  <span class="identifier">min_count</span><span class="special">();</span>
  <span class="keyword">static</span> <span class="identifier">date_int_type</span>  <span class="identifier">max_count</span><span class="special">();</span>
  <span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <span class="identifier">days_in_week</span><span class="special">();</span>
<span class="special">};</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span>
    </p><p>
      <span class="emphasis"><em>Returns:</em></span>
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.basic_calendar_ymd_template_parameter"></a><h4><a name="id271210"></a>
      basic_calendar ymd template parameter
    </h4><p>
      The ymd_type parameter is a simple structure that has the following requirements.
    </p><div class="informaltable"><h4><a name="id271224"></a>
        <span class="table-title">ymd_type requirements</span>
      </h4><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Expression</th><th>Notes</th></tr></thead><tbody><tr><td>ymd_type::year_type</td><td>A typedef that provides the
            integer type used for year field of the ymd_type. </td></tr><tr><td>ymd_type::month_type</td><td>A typedef that provides the
            integer type used for month field of the ymd_type. </td></tr><tr><td>ymd_type::day_type</td><td>A typedef that provides the integer
            type used for month field of the ymd_type. </td></tr><tr><td>ymd_type.year</td><td>An integer type that represents the
            current year. TODO--ragne</td></tr><tr><td>ymd_type.month</td><td>An integer type the represents a
            month. Values will be assigned with January == 1 thru December ==12</td></tr><tr><td>ymd_type.day</td><td>An integer type that represents a day
            within a month. Values will range from 1 to 31.</td></tr><tr><td>ymd_type.day_of_year</td><td>An integer type that represents
            the day of the year. Values will range from 1 to 366</td></tr></tbody></table></div><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.basic_calendar_typedefs"></a><h4><a name="id271332"></a>
      basic_calendar typedefs
    </h4><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.basic_calendar_calculation_functions"></a><h4><a name="id271346"></a>
      basic_calendar calculation functions
    </h4><pre class="programlisting">
<span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <span class="identifier">day_of_week</span>    <span class="special">(</span><span class="keyword">const</span> <span class="identifier">ymd_type</span><span class="special">&amp;</span> <span class="identifier">ymd</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Day of the week from the specified year-month-day
      where Sunday is 0, Monday is 1, thru Saturday == 6.
    </p><pre class="programlisting">
<span class="keyword">static</span> <span class="keyword">int</span> <span class="identifier">week_number</span>    <span class="special">(</span><span class="keyword">const</span> <span class="identifier">ymd_type</span><span class="special">&amp;</span> <span class="identifier">ymd</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Calculate the iso week number for the year-month-day
      as defined in <a href="http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=40874" target="_top">ISO
      8601:2004 Data elements and interchange formats -- Information interchange
      -- Representation of dates and times</a>
    </p><p>
      <span class="emphasis"><em>Returns:</em></span> An integer value from 0 to 53 corresponding to
      the week number for the year,month,day.
    </p><pre class="programlisting">
<span class="keyword">static</span> <span class="keyword">bool</span>           <span class="identifier">is_leap_year</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> True if the specified year is a leap year, false
      otherwise.
    </p><pre class="programlisting">
<span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <span class="identifier">last_day_of_month</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">month_type</span> <span class="identifier">m</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Calculate the last day of the month taking into
      account leap years. This is a constant for all months except February which
      returns 28 for a non leap year and 29 for a leap year. For example, the value
      for January is always 31.
    </p><p>
      <span class="emphasis"><em>Returns:</em></span> An integer value between 1 and 31 that represents
      the last day of the month.
    </p><pre class="programlisting">
<span class="keyword">static</span> <span class="identifier">date_int_type</span>  <span class="identifier">day_number</span>     <span class="special">(</span><span class="keyword">const</span> <span class="identifier">ymd_type</span><span class="special">&amp;</span> <span class="identifier">ymd</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Calculate an integer day count based on the proleptic
      Gregorian/ISO calendar that corresponds to the date. The number must monotinically
      increase starting from min_count to max_count with one value for each day.
    </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
        This function provides the infrastructure to implement the days_between dates
        externally from the calendar class.
      </p></div><p>
      <span class="emphasis"><em>Returns:</em></span> An integer cooresponding to the specified year-month-day.
      The return value from this function will map to the same passed year-month-day
      as calculated by from_day_number.
    </p><pre class="programlisting">
<span class="keyword">static</span> <span class="identifier">ymd_type</span>       <span class="identifier">from_day_number</span><span class="special">(</span><span class="identifier">date_int_type</span> <span class="identifier">day_number</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Converts an integer back to a year-month-day.
    </p><p>
      <span class="emphasis"><em>Returns:</em></span> The year-month-day value cooresponding to the
      specified day_number.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.basic_calendar_date_int_type_template_parameter"></a><h4><a name="id271765"></a>
      basic_calendar date_int_type template parameter
    </h4><p>
      The <code class="code"><span class="identifier">date_int_type</span></code> provides
      an integer type that is used in all calculations of the date.
    </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
        The intent of the <code class="code"><span class="identifier">date_int_type</span></code>
        is to allow implementations to use different integer sizes within the implementation.
        For example, some implementations my use 64 bit integer in representing a
        combined date time and will find it helpful to directly calculate into this
        specific integer type even though a 32 bit integer would be sufficient to
        represent the valid date range. In addition, this enables low level user
        access to these functions using user defined integer types.
      </p></div><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.basic_calendar_julian_calendar_functions"></a><h4><a name="id271807"></a>
      basic_calendar julian calendar functions
    </h4><p>
      The following functions provide conversions to and from julian an modified
      julian day numbers.
    </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
        A freely available resource with descriptions of the algorithms to be implemented
        here can be found at <a href="http://www.tondering.dk/claus/calendar.html" target="_top">http://www.tondering.dk/claus/calendar.html</a>
      </p></div><pre class="programlisting">
<span class="keyword">static</span> <span class="identifier">date_int_type</span>  <span class="identifier">julian_day_number</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">ymd_type</span><span class="special">&amp;</span> <span class="identifier">ymd</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Calculate the julian day number (TODO reference
      and outside).
    </p><p>
      <span class="emphasis"><em>Returns:</em></span> An integer representing the julian day number
      for the specified year-month-day.
    </p><pre class="programlisting">
<span class="keyword">static</span> <span class="keyword">long</span> <span class="identifier">modjulian_day_number</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">ymd_type</span><span class="special">&amp;</span> <span class="identifier">ymd</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Calculate the modified julian day number (TODO
      reference and outside).
    </p><p>
      <span class="emphasis"><em>Returns:</em></span> Day of the week from the specified year-month-day
      where Sunday<code class="literal">=0, Monday</code><code class="literal">1, thru Saturday</code>=6.
    </p><pre class="programlisting">
<span class="keyword">static</span> <span class="identifier">ymd_type</span>       <span class="identifier">from_julian_day_number</span><span class="special">(</span><span class="keyword">long</span> <span class="identifier">julian_day</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span>
    </p><p>
      <span class="emphasis"><em>Returns:</em></span> A year-month-day structure with day, month, year
      fields set.
    </p><pre class="programlisting">
<span class="keyword">static</span> <span class="identifier">ymd_type</span>       <span class="identifier">from_modjulian_day_number</span><span class="special">(</span><span class="keyword">long</span> <span class="identifier">mod_julian_day</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> A year-month-day structure from the modified
      julian day.
    </p><p>
      <span class="emphasis"><em>Returns:</em></span> Day of the week from the specified year-month-day
      where Sunday <code class="literal">= 0, Monday =</code> 1, thru Saturday == 6.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.basic_calendar_traits_functions"></a><h4><a name="id272102"></a>
      basic_calendar traits functions
    </h4><p>
      The following functions provide basic information about the minimum and maximum
      dates handled by the implementation.
    </p><pre class="programlisting">
<span class="keyword">static</span> <span class="identifier">ymd_type</span>       <span class="identifier">min_ymd</span><span class="special">();</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Get the year-month-day of the minimum date provided
      by the calendar implementation.
    </p><p>
      <span class="emphasis"><em>Returns:</em></span> An instance of the ymd_type with the year, month,
      and day fields set.
    </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
        For this proposal this will nominally be [1400-01-01
      </p></div><pre class="programlisting">
<span class="keyword">static</span> <span class="identifier">ymd_type</span>       <span class="identifier">max_ymd</span><span class="special">();</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Get the year-month-day of the maximum date provided
      by the calendar implementation.
    </p><p>
      <span class="emphasis"><em>Returns:</em></span> An instance of the ymd_type with the year, month,
      and day fields set.
    </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
        For this proposal this will nominally be [10000-01-01
      </p></div><pre class="programlisting">
<span class="keyword">static</span> <span class="identifier">date_int_type</span>  <span class="identifier">min_count</span><span class="special">();</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns the minimum day number value used by
      the calendar.
    </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
        This will typically be 0, but implementations may use 0 for special values
        internally.
      </p></div><pre class="programlisting">
<span class="keyword">static</span> <span class="identifier">date_int_type</span>  <span class="identifier">max_count</span><span class="special">();</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns the maximum day number value used by
      the calendar.
    </p><pre class="programlisting">
<span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <span class="identifier">days_in_week</span><span class="special">();</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Enables generic programming for non-iso calendar
      systems.
    </p><p>
      <span class="emphasis"><em>Returns:</em></span> Returns 7.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date"></a><h3><a name="id272341"></a>
      Template Class basic_date
    </h3><p>
      The basic_date template provide the core interface for the <code class="code"><span class="identifier">date</span></code>
      typedef that will be the primary interface for date programming. Internally,
      the basic_date will hold an implementation defined integer type. This allows
      the basic_date interface to provide with with different calendar implementations
      that provide different valid date ranges the typedef <code class="code"><span class="identifier">date</span></code>.
    </p><pre class="programlisting">
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">date_impl</span><span class="special">&gt;</span> 
<span class="keyword">class</span> <span class="identifier">basic_date</span> <span class="special">{</span>
 <span class="keyword">public</span><span class="special">:</span>

  <span class="comment">//typedefs
</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_impl</span><span class="special">::</span><span class="identifier">calendar_type</span> <span class="identifier">calendar_type</span><span class="special">;</span>

  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_impl</span><span class="special">::</span><span class="identifier">year_type</span>  <span class="identifier">year_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_impl</span><span class="special">::</span><span class="identifier">month_type</span> <span class="identifier">month_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_impl</span><span class="special">::</span><span class="identifier">day_type</span>   <span class="identifier">day_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_impl</span><span class="special">::</span><span class="identifier">ymd_type</span>   <span class="identifier">ymd_type</span><span class="special">;</span>

  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_impl</span><span class="special">::</span><span class="identifier">day_of_week_type</span>    <span class="identifier">day_of_week_type</span><span class="special">;</span>  
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_impl</span><span class="special">::</span><span class="identifier">day_of_year_type</span>    <span class="identifier">day_of_year_type</span><span class="special">;</span>  
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_impl</span><span class="special">::</span><span class="identifier">week_of_year_type</span>   <span class="identifier">week_of_year_type</span><span class="special">;</span>

  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_impl</span><span class="special">::</span><span class="identifier">weekday_type</span>        <span class="identifier">weekday_type</span><span class="special">;</span> 
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_impl</span><span class="special">::</span><span class="identifier">week_of_month_type</span>  <span class="identifier">week_of_month_type</span><span class="special">;</span> 

  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_impl</span><span class="special">::</span><span class="identifier">special_values_type</span> <span class="identifier">special_values_type</span><span class="special">;</span>

  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_impl</span><span class="special">::</span><span class="identifier">date_duration_type</span>  <span class="identifier">date_duration_type</span><span class="special">;</span>

  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_impl</span><span class="special">::</span><span class="identifier">date_int_type</span> <span class="identifier">date_int_type</span><span class="special">;</span>


  <span class="comment">//constructors
</span>  <span class="identifier">basic_date</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">month_type</span> <span class="identifier">m</span><span class="special">,</span> <span class="identifier">day_type</span> <span class="identifier">d</span><span class="special">);</span>
  <span class="identifier">basic_date</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">ymd_type</span><span class="special">&amp;</span> <span class="identifier">ymd</span><span class="special">);</span>
  <span class="identifier">basic_date</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">day_of_year_type</span> <span class="identifier">doy</span><span class="special">);</span>
  <span class="identifier">basic_date</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
  <span class="comment">//constructs something like: Sunday in Week 50 of year 2004
</span>  <span class="identifier">basic_date</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">week_of_year_type</span> <span class="identifier">week_number</span><span class="special">,</span> <span class="identifier">weekday_type</span> <span class="identifier">wd</span><span class="special">);</span>
  <span class="comment">//constructs something like: 3rd Monday in Feb of 2004
</span>  <span class="identifier">basic_date</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">month_type</span> <span class="identifier">m</span><span class="special">,</span> <span class="identifier">week_of_month_type</span> <span class="identifier">week_number</span><span class="special">,</span> <span class="identifier">weekday_type</span> <span class="identifier">wd</span><span class="special">);</span>
  <span class="identifier">basic_date</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">time_t</span> <span class="identifier">t</span><span class="special">);</span>
  <span class="identifier">basic_date</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">tm</span><span class="special">&amp;</span> <span class="identifier">datetm</span><span class="special">);</span>
  <span class="comment">//construct positive/negative infinity max or min date
</span>  <span class="identifier">basic_date</span><span class="special">(</span><span class="identifier">special_values_type</span> <span class="identifier">sv</span><span class="special">);</span>
  <span class="comment">//default constuctor == not-a-date-time
</span>  <span class="identifier">basic_date</span><span class="special">();</span> 

  <span class="comment">//Basic accessors
</span>  <span class="identifier">year_type</span>        <span class="identifier">year</span><span class="special">()</span>           <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">month_type</span>       <span class="identifier">month</span><span class="special">()</span>          <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">day_type</span>         <span class="identifier">day</span><span class="special">()</span>            <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">day_of_week_type</span> <span class="identifier">day_of_week</span><span class="special">()</span>    <span class="keyword">const</span><span class="special">;</span> <span class="comment">//eg: Sun, Mon, ...
</span>

  <span class="comment">//additional accessors
</span>  <span class="identifier">day_of_year_type</span>  <span class="identifier">day_of_year</span><span class="special">()</span>  <span class="keyword">const</span><span class="special">;</span> <span class="comment">//1..365 or 1..366 (for leap year)
</span>  <span class="identifier">week_of_year_type</span> <span class="identifier">week_number</span><span class="special">()</span>  <span class="keyword">const</span><span class="special">;</span> <span class="comment">//ISO 8601 week number 1..53
</span>  <span class="identifier">date_int_type</span>     <span class="identifier">day_number</span><span class="special">()</span>   <span class="keyword">const</span><span class="special">;</span> <span class="comment">//Return the day number since start of the epoch
</span>  <span class="identifier">basic_date</span>        <span class="identifier">end_of_month</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> <span class="comment">//Return the last day of the current month
</span>
  <span class="comment">//special value accessors
</span>  <span class="keyword">bool</span> <span class="identifier">is_special</span><span class="special">()</span>                 <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">special_values_type</span> <span class="identifier">as_special</span><span class="special">()</span>  <span class="keyword">const</span><span class="special">;</span>

  <span class="comment">//conversion accessors
</span>  <span class="identifier">time_t</span>        <span class="identifier">to_time_t</span><span class="special">()</span>      <span class="keyword">const</span><span class="special">;</span>   
  <span class="identifier">ymd_type</span>      <span class="identifier">year_month_day</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> <span class="comment">//Get ymd structure
</span>
  <span class="comment">// Conversion to julian calendar
</span>  <span class="identifier">date_int_type</span> <span class="identifier">julian_day</span><span class="special">()</span>     <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">long</span>          <span class="identifier">modjulian_day</span><span class="special">()</span>  <span class="keyword">const</span><span class="special">;</span> 

  <span class="comment">//calculation accessors 
</span>  <span class="identifier">date_duration_type</span> <span class="identifier">days_until</span>  <span class="special">(</span><span class="identifier">weekday_type</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">date_duration_type</span> <span class="identifier">days_before</span> <span class="special">(</span><span class="identifier">weekday_type</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">basic_date</span>         <span class="identifier">next</span>        <span class="special">(</span><span class="identifier">weekday_type</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">basic_date</span>         <span class="identifier">previous</span>    <span class="special">(</span><span class="identifier">weekday_type</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
      
  <span class="comment">//comparison operators
</span>  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>

  <span class="comment">//arithmetic operators
</span>  <span class="identifier">date_duration_type</span> <span class="keyword">operator</span><span class="special">-</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;)</span>     <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">basic_date</span>         <span class="keyword">operator</span><span class="special">-</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">date_duration_type</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">basic_date</span>         <span class="keyword">operator</span><span class="special">-=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">date_duration_type</span><span class="special">&amp;);</span>
  <span class="identifier">basic_date</span>         <span class="keyword">operator</span><span class="special">+</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">date_duration_type</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">basic_date</span>         <span class="keyword">operator</span><span class="special">+=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">date_duration_type</span><span class="special">&amp;);</span>

<span class="special">};</span>


<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">TraitsT</span><span class="special">&gt;</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span>
<span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">date</span><span class="special">&amp;);</span>

<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">&gt;</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span>
<span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span> <span class="identifier">is</span><span class="special">,</span> <span class="identifier">date</span><span class="special">&amp;);</span>


<span class="comment">//Exception classes for construction of dates
</span><span class="keyword">class</span> <span class="identifier">bad_day_of_month</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">out_of_range</span>
<span class="special">{};</span>
<span class="keyword">class</span> <span class="identifier">bad_day_of_year</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">out_of_range</span>
<span class="special">{};</span>
<span class="keyword">class</span> <span class="identifier">bad_week_of_year</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">out_of_range</span>
<span class="special">{};</span>
<span class="keyword">class</span> <span class="identifier">bad_year</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">out_of_range</span>
<span class="special">{};</span>
<span class="keyword">class</span> <span class="identifier">bad_month</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">out_of_range</span>
<span class="special">{};</span>
<span class="keyword">class</span> <span class="identifier">bad_weekday</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">out_of_range</span>
<span class="special">{};</span>
  <span class="comment">//Exception class for conversions of local time values
</span><span class="keyword">class</span> <span class="identifier">invalid_time_label</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">logic_error</span>
<span class="special">{};</span>
</pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date___typedefs"></a><h4><a name="id275052"></a>
      Template Class basic_date - typedefs
    </h4><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date___constructors"></a><h4><a name="id275066"></a>
      Template Class basic_date - constructors
    </h4><p>
      The date type provides may types of constructors for creating a date type.
    </p><pre class="programlisting">
<span class="identifier">basic_date</span><span class="special">();</span> 
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Construct date with the special value not-a-date-time.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> none
    </p><pre class="programlisting">
<span class="identifier">basic_date</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Copy constructor.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> none
    </p><pre class="programlisting">
<span class="identifier">basic_date</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">year</span><span class="special">,</span> <span class="identifier">month_type</span> <span class="identifier">month</span><span class="special">,</span> <span class="identifier">day_type</span> <span class="identifier">day</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Construct a month from integer year, month, day
      values.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_year</span></code>
      if year &gt; calendar::max_ymd().year
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_month</span></code>
      if month &lt; 0 or month &gt; 12
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_day</span></code>
      if day is greater than calendar::last_day_of_month(year,month)
    </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
        This last case requires the exception be thrown in the case of a non leap-year
        and a Feb 29th specification.
      </p></div><pre class="programlisting">
<span class="identifier">basic_date</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">ymd_type</span><span class="special">&amp;</span> <span class="identifier">ymd</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Construct a month from integer year, month, day
      values in the ymd struct.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_year</span></code>
      if ymd.year &gt; calendar::max_ymd().year
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_month</span></code>
      if ymd.month &lt; 0 or month &gt; 12
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_day</span></code>
      if ymd.day is greater than calendar::last_day_of_month(year,month)
    </p><pre class="programlisting">
<span class="identifier">basic_date</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">year</span><span class="special">,</span> <span class="identifier">day_of_year_type</span> <span class="identifier">day_of_year</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Construct a date based on the year and the day
      of year value.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_year</span></code>
      if ymd.year &gt; calendar::max_ymd().year
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_day_of_year</span></code>
      day_of_year &gt; 366 or (day_of_year <code class="literal">= 366 and and year !</code>
      leap year)
    </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
        In the 8601 standard the day_of_year is called the 'ordinal number'. In leap
        years, dates after Feb 29 have a different day number than in common years.
        As a result the day_of_year for March 1 is 61 in a leap year and 60 in common
        years.
      </p></div><pre class="programlisting">
<span class="identifier">basic_date</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">week_of_year_type</span> <span class="identifier">week_number</span><span class="special">,</span> <span class="identifier">weekday_type</span> <span class="identifier">wd</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Construct a date using a specification like:
      Sunday in Week 50 of year 2004.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_year</span></code>
      if ymd.year &gt; calendar::max_ymd().year
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_weekday</span></code>
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_week_of_year</span></code>
    </p><pre class="programlisting">
<span class="identifier">basic_date</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">month_type</span> <span class="identifier">m</span><span class="special">,</span> <span class="identifier">week_of_month_type</span> <span class="identifier">week_number</span><span class="special">,</span> <span class="identifier">weekday_type</span> <span class="identifier">wd</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Constructs something like: 3rd Monday in Feb
      of 2004
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_year</span></code>
      if ymd.year &gt; calendar::max_ymd().year
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_weekday</span></code>
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_week_of_year</span></code>
    </p><pre class="programlisting">
<span class="identifier">basic_date</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">time_t</span> <span class="identifier">t</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Constructs date base on offset from time_t epoch
      of 1970-01-01.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> None.
    </p><pre class="programlisting">
<span class="identifier">basic_date</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">tm</span><span class="special">&amp;</span> <span class="identifier">datetm</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Constructs date from the fields specified in
      the tm structure. In particular uses the fields tm_mday, tm_mon, tm_year. Values
      of tm_year are treated as years since 1900. Negative values of tm_year are
      interpreted as a negative offset from the year 1900.
    </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
        Most implementations of date input/output in current standard libraries accept
        and correctly handle tm_year with negative values. For example, tm_year ==
        -1 logically corresponds to 1899. Recently one implementation made a recent
        change by that prohibited negative tm_year values. The author has not been
        able to find anything in the standard or otherwise that specifies how negative
        values of tm_year should be handled. This may need to change to support portable
        implementations going forward.
      </p></div><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_year</span></code>
      if datetm.tm_year+1900 &gt; calendar::max_ymd().year or datetm.tm_year+1900
      &lt; calendar::min_ymd().year
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_month</span></code>
      if datetm.tm_month &lt; 0 or datetm.tm_month &gt; 11
    </p><p>
      <span class="emphasis"><em>Throws:</em></span><code class="code"><span class="identifier">bad_day</span></code>
      if datetm.tm_day is greater than calendar::last_day_of_month(year,month) or
      datetm.tm_day &lt; 1
    </p><pre class="programlisting">
<span class="identifier">basic_date</span><span class="special">(</span><span class="identifier">special_values_type</span> <span class="identifier">sv</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Constructs date to one of the supported special
      values.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> None.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date___basic_accessors"></a><h4><a name="id275933"></a>
      Template Class basic_date - Basic accessors
    </h4><pre class="programlisting">
<span class="identifier">year_type</span>        <span class="identifier">year</span><span class="special">()</span>           <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns year part of the date. Undefined if date
      is a special_value.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> None.
    </p><pre class="programlisting">
<span class="identifier">month_type</span>       <span class="identifier">month</span><span class="special">()</span>          <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns month part of the date. Undefined if
      date is a special_value.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> None.
    </p><pre class="programlisting">
<span class="identifier">day_type</span>         <span class="identifier">day</span><span class="special">()</span>            <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns month part of the date. Undefined if
      date is a special_value.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> None.
    </p><pre class="programlisting">
<span class="identifier">day_of_week_type</span> <span class="identifier">day_of_week</span><span class="special">()</span>    <span class="keyword">const</span><span class="special">;</span> 
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns the iso day of the week represented by
      the date. Undefined if date is a special value.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> None.
    </p><pre class="programlisting">
<span class="identifier">day_of_year_type</span>  <span class="identifier">day_of_year</span><span class="special">()</span>  <span class="keyword">const</span><span class="special">;</span> <span class="comment">//1..365 or 1..366 (for leap year)
</span></pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns the iso day of the year (1..366) respresented
      by the date. Undefined if date is a special value.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> None.
    </p><pre class="programlisting">
<span class="identifier">week_of_year_type</span> <span class="identifier">week_number</span><span class="special">()</span>  <span class="keyword">const</span><span class="special">;</span> 
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns the iso week number (1..53) of the day
      respresented by the date. Undefined if date is a special value.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> None.
    </p><pre class="programlisting">
<span class="identifier">date_int_type</span>     <span class="identifier">day_number</span><span class="special">()</span>   <span class="keyword">const</span><span class="special">;</span> 
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns the count of days from calendar::ymd_min()
      to date represented by date. Undefined if date is a special value.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> None.
    </p><pre class="programlisting">
<span class="identifier">basic_date</span>        <span class="identifier">end_of_month</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> 
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns the last day in the month of the date
      as defined by calendar::last_day_of_month(year, month). Undefined if date is
      a special value.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> None.
    </p><pre class="programlisting">
<span class="keyword">bool</span> <span class="identifier">is_special</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> True of the date is set to one of the special
      values, false otherwise.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> None.
    </p><pre class="programlisting">
<span class="identifier">special_values_type</span> <span class="identifier">as_special</span><span class="special">()</span>  <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns one of the special values
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> None.
    </p><pre class="programlisting">
<span class="identifier">time_t</span> <span class="identifier">to_time_t</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>   
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Conversion accessor that returns time_t value
      represented by the date.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> bad_date_conversion if date value is outside the
      valid date range represented by time_t or date is a special value.
    </p><pre class="programlisting">
<span class="identifier">ymd_type</span>      <span class="identifier">year_month_day</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> 
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns the date broken into the year, month,
      and day structure.
    </p><pre class="programlisting">
<span class="identifier">date_int_type</span> <span class="identifier">julian_day</span><span class="special">()</span>     <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Conversion accessor that returns julian day value
      represented by the date.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> bad_date_conversion if date value is outside the
      valid date range represented by julian_day or date is a special value.
    </p><pre class="programlisting">
<span class="identifier">date_int_type</span> <span class="identifier">modjulian_day</span><span class="special">()</span>  <span class="keyword">const</span><span class="special">;</span> 
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Conversion accessor that returns time_t value
      represented by the date.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> bad_date_conversion if date value is outside the
      valid date range represented by modjulian_day or date is a special value.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date___comparison_operators"></a><h4><a name="id276591"></a>
      Template Class basic_date - comparison operators
    </h4><p>
      The comparison operators will take into account the following rules for handling
      of special values. All representable dates between the minimum and maximum
      representable date are described as 'any valid date' below. In general, positive_infinity
      is considered to be greater than any valid date as well as not_a_date_time.
      negative_infinity is considered to be less than any valid date as well as not_a_date_time.
      Since max_date_time and min_date_time special values represent valid dates
      these special values utilize normal comparison rules.
    </p><div class="informaltable"><h4><a name="id276609"></a>
        <span class="table-title">Special Value Comparison Rules</span>
      </h4><table border="1"><colgroup><col><col><col></colgroup><thead><tr><th>description</th><th>result</th><th>Notes</th></tr></thead><tbody><tr><td>negative_infinity &lt; negative_infinity</td><td>false</td><td></td></tr><tr><td>negative_infinity == negative_infinity</td><td>true</td><td></td></tr><tr><td>negative_infinity &lt; not_a_date_time</td><td>true</td><td>Also
            true for less-equal</td></tr><tr><td>negative_infinity &lt; any valid date</td><td>true</td><td></td></tr><tr><td>not_a_date_time == not_a_date_time</td><td>true</td><td></td></tr><tr><td>not_a_date_time &lt; not_a_date_time</td><td>false</td><td>Same
            is true for less-equal, greater-equal and greater </td></tr><tr><td>not_a_date_time 
==
            any valid date</td><td>false</td><td>Same is true for less-equal,
            greater-equal and greater </td></tr><tr><td>positive_infinity &gt; any valid date</td><td>true</td><td>Also
            true for greater-equal </td></tr><tr><td>positive_infinity &gt; negative_infinity</td><td>true</td><td>Also
            true for greater-equal, less, less-equal </td></tr><tr><td>positive_infinity &gt; negative_infinity</td><td>true</td><td>Also
            true for greater-equal false for less and less-equal </td></tr></tbody></table></div><pre class="programlisting">
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> True if date represented by *this &lt; rhs -
      false otherwise.
    </p><pre class="programlisting">
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> True if date represented by *this &lt;= rhs -
      false otherwise.
    </p><pre class="programlisting">
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> True if date represented by *this &gt; rhs -
      false otherwise.
    </p><pre class="programlisting">
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> True if date represented by *this &gt;= rhs -
      false otherwise.
    </p><pre class="programlisting">
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> True if date represented by *this &gt;= rhs -
      false otherwise.
    </p><pre class="programlisting">
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date___arithmetic_operators"></a><h4><a name="id277131"></a>
      Template Class basic_date - arithmetic operators
    </h4><p>
      The following arithmetic operators perform simple subtraction except when the
      value of the date is a special value. The table defines the rules for special
      value calculations where 'infinity' represents either positive_infinity or
      negative_infinity.
    </p><div class="informaltable"><h4><a name="id277146"></a>
        <span class="table-title">Special Value Calculation Rules</span>
      </h4><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Rule --&gt; Result Type</th><th>Notes</th></tr></thead><tbody><tr><td>Timepoint(not_a_date_time) + Duration --&gt; Timepoint(not_a_date_time)</td><td></td></tr><tr><td>Timepoint(infinity) + Duration --&gt; Timepoint(infinity)</td><td></td></tr><tr><td>Timepoint + Duration(infinity) --&gt; Timepoint(infinity)</td><td></td></tr><tr><td>Timepoint - Duration(infinity) --&gt; Timepoint(-infinity)</td><td></td></tr><tr><td>Timepoint(+infinity) + Duration(-infinity) --&gt; not_a_date_time</td><td></td></tr><tr><td>Duration(+infinity) + Duration(-infinity) --&gt; not_a_date_time</td><td></td></tr><tr><td>Duration(infinity) * Zero --&gt; not_a_date_time</td><td></td></tr><tr><td>Duration(infinity) * Integer(Not Zero) --&gt; Duration(infinity)</td><td></td></tr><tr><td>Duration(+infinity) * -Integer --&gt; Duration(-infinity)</td><td></td></tr><tr><td>Duration(infinity) / Integer --&gt; Duration(infinity)</td><td></td></tr></tbody></table></div><pre class="programlisting">
<span class="identifier">days</span> <span class="keyword">operator</span><span class="special">-</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;)</span>     <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Number of days between this and rhs date value,
      or special value results.
    </p><pre class="programlisting">
<span class="identifier">basic_date</span>       <span class="keyword">operator</span><span class="special">-</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">days</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Date with the specified number of days subtracted
      or a special value result.
    </p><pre class="programlisting">
<span class="identifier">basic_date</span>       <span class="keyword">operator</span><span class="special">-=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">days</span><span class="special">&amp;);</span>
</pre><p>
      <span class="emphasis"><em>Effects:</em></span> Set the date the the number of days subtracted
      or a special value result.
    </p><p>
      <span class="emphasis"><em>Returns:</em></span> Date with the specified number of days subtracted
      or a special value result.
    </p><pre class="programlisting">
<span class="identifier">basic_date</span>       <span class="keyword">operator</span><span class="special">+</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">days</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Date with the specified number of days added
      or a special value result.
    </p><pre class="programlisting">
<span class="identifier">basic_date</span>       <span class="keyword">operator</span><span class="special">+=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">days</span><span class="special">&amp;);</span>
</pre><p>
      <span class="emphasis"><em>Effects:</em></span> Set the date the the number of days added or
      a special value result.
    </p><p>
      <span class="emphasis"><em>Returns:</em></span> Date with the specified number of days added
      or a special value result.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.date_construction_exceptions"></a><h3><a name="id277561"></a>
      Date Construction Exceptions
    </h3><p>
      The following sections detail classes the represent various errors provided
      by the library to prevent incorrect construction of invalid date and time values.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_datetime_error"></a><h4><a name="id277579"></a>
      Class datetime_error
    </h4><p>
      The datetime_error is a base exception for all datetime error reporting. Derived
      classes provide additional detailed error information.
    </p><pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">datetime_error</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span> 
<span class="special">{}</span>
</pre><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
        This class derives from std::runtime_error under the presumption that most
        of the errors involving date construction are a result of bad data input
        from a user or other data source that can only be read at runtime.
      </p></div><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_bad_day_of_month"></a><h4><a name="id277653"></a>
      Class bad_day_of_month
    </h4><pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">bad_day_of_month</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">bad_date_error</span> 
<span class="special">{</span>
 <span class="keyword">public</span><span class="special">:</span>
  <span class="identifier">bad_day_of_month</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">month</span><span class="special">);</span>
  <span class="keyword">int</span> <span class="identifier">bad_day</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
  
<span class="special">};</span>


<span class="identifier">bad_day_of_month</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">month</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Constructor that takes the specified month that
      is out of range. Will be a value &gt; 28 or &lt; 1.
    </p><pre class="programlisting">
<span class="keyword">int</span> <span class="identifier">bad_day</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Returns the invalid day in month that caused
      construction failure.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_bad_day_of_year"></a><h4><a name="id277843"></a>
      Class bad_day_of_year
    </h4><pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">bad_day_of_year</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">bad_date_error</span> 
<span class="special">{</span>
 <span class="keyword">public</span><span class="special">:</span>
  <span class="identifier">bad_day_of_year</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">day_of_year</span><span class="special">);</span>
  <span class="keyword">int</span> <span class="identifier">bad_day</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>   
<span class="special">};</span>


<span class="identifier">bad_day_of_year</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">day_of_year</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Constructor that takes the specified day of year
      that is out of range. Will be a value &gt; 365 or &lt; 1.
    </p><pre class="programlisting">
<span class="keyword">int</span> <span class="identifier">bad_day</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Returns the invalid day in year that caused construction
      failure.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_bad_week_of_year"></a><h4><a name="id278033"></a>
      Class bad_week_of_year
    </h4><pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">bad_week_of_year</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">bad_date_error</span> 
<span class="special">{</span>
 <span class="keyword">public</span><span class="special">:</span>
  <span class="identifier">bad_week_of_year</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">week_of_year</span><span class="special">);</span>
  <span class="keyword">int</span> <span class="identifier">bad_week</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>   
<span class="special">};</span>


<span class="identifier">bad_week_of_year</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">week_of_year</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Constructor that takes the specified week of
      year that is out of range. Will be a value &gt; 53 or &lt; 1.
    </p><pre class="programlisting">
<span class="keyword">int</span> <span class="identifier">bad_week</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Returns the invalid week in year that caused
      construction failure.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_bad_year"></a><h4><a name="id278222"></a>
      Class bad_year
    </h4><pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">bad_year</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">bad_date_error</span> 
<span class="special">{</span>
 <span class="keyword">public</span><span class="special">:</span>
  <span class="identifier">bad_year</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">year</span><span class="special">);</span>
  <span class="keyword">int</span> <span class="identifier">bad_year</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>   
<span class="special">};</span>


<span class="identifier">bad_year</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">year</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Constructor that takes the specified year that
      is out of range. Will be a year &gt; calendar::max_ymd().year or year &lt;
      calendar::min_ymd().year
    </p><pre class="programlisting">
<span class="keyword">int</span> <span class="identifier">bad_year</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Returns the invalid year that caused construction
      failure.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_bad_month"></a><h4><a name="id278412"></a>
      Class bad_month
    </h4><pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">bad_month</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">bad_date_error</span> 
<span class="special">{</span>
 <span class="keyword">public</span><span class="special">:</span>
  <span class="identifier">bad_month</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">month</span><span class="special">);</span>
  <span class="keyword">int</span> <span class="identifier">bad_month</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>   
<span class="special">};</span>


<span class="identifier">bad_month</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">month</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Constructor that takes the specified month that
      is out of range. Will be a month value &lt; 1 or greater than 12.
    </p><pre class="programlisting">
<span class="keyword">int</span> <span class="identifier">bad_month</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Returns the invalid month that caused construction
      failure.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_bad_weekday"></a><h4><a name="id278602"></a>
      Class bad_weekday
    </h4><pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">bad_weekday</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">bad_date_error</span> 
<span class="special">{</span>
 <span class="keyword">public</span><span class="special">:</span>
  <span class="identifier">bad_weekday</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">weekday</span><span class="special">);</span>
  <span class="keyword">int</span> <span class="identifier">bad_weekday</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>   
<span class="special">};</span>


<span class="identifier">bad_weekday</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">weekday</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Constructor that takes the specified weekday
      that is out of range. Will be a weekday value &lt; 1 or greater than 7. int
      bad_weekday() const;
    </p><p>
      <span class="emphasis"><em>Remarks:</em></span> Returns the invalid weekday that caused construction
      failure.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.class_bad_date_conversion"></a><h4><a name="id278760"></a>
      Class bad_date_conversion
    </h4><pre class="programlisting">
<span class="keyword">class</span> <span class="identifier">bad_date_conversion</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">bad_date_error</span> 
<span class="special">{</span>
 <span class="keyword">public</span><span class="special">:</span>
  <span class="keyword">enum</span> <span class="identifier">conversion_error_type</span> <span class="special">=</span> <span class="special">{</span><span class="identifier">max_date_exceeded</span><span class="special">,</span> <span class="identifier">min_date_exceeded</span><span class="special">};</span>
  <span class="identifier">bad_date_conversion</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">year</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">month</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">day</span><span class="special">,</span> 
                      <span class="identifier">conversion_error_type</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">date_system</span><span class="special">);</span>
<span class="special">};</span>


  <span class="identifier">baddate_conversion</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">year</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">month</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">day</span><span class="special">,</span> 
                     <span class="identifier">conversion_error_type</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">date_system</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Effects:</em></span> Constructs a what string for the base class representative
      of the error.
    </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
        The intent is to create and error to along the lines of: "date 2039-10-31
        value exceeds maximum range of time_t."
      </p></div><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.basic_duration"></a><h3><a name="id279070"></a>
      Basic Duration
    </h3><pre class="programlisting">
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">duration_rep_traits</span><span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">basic_duration</span>
<span class="special">{</span> 
<span class="keyword">public</span><span class="special">:</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">duration_rep_traits</span><span class="special">::</span><span class="identifier">int_type</span>  <span class="identifier">duration_rep_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">duration_rep_traits</span><span class="special">::</span><span class="identifier">impl_type</span> <span class="identifier">duration_rep</span><span class="special">;</span>

  <span class="comment">//constructors    
</span>  <span class="keyword">explicit</span> <span class="identifier">basic_duration</span><span class="special">(</span><span class="identifier">duration_rep</span> <span class="identifier">day_count</span><span class="special">);</span>
  <span class="identifier">basic_duration</span><span class="special">(</span><span class="identifier">special_values</span><span class="special">);</span>
  <span class="identifier">duration_rep</span> <span class="identifier">get_rep</span><span class="special">()</span>   <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">duration_rep</span> <span class="identifier">get_broken_down_duration</span><span class="special">()</span>      <span class="keyword">const</span><span class="special">;</span>

  <span class="comment">//accessors
</span>  <span class="keyword">bool</span>           <span class="identifier">is_special</span><span class="special">()</span>  <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">special_values</span> <span class="identifier">as_special</span><span class="special">()</span>  <span class="keyword">const</span><span class="special">;</span> 

  <span class="keyword">static</span> <span class="identifier">duration_type</span> <span class="identifier">unit</span><span class="special">();</span>

  <span class="comment">//comparison operators
</span>  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">date_duration</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">date_duration</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">date_duration</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">date_duration</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">date_duration</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">date_duration</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>

  <span class="comment">//arithmetic operations
</span>  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">-</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">duration_type</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">-=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">duration_type</span><span class="special">&amp;);</span>
  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">+</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">duration_type</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">+=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">duration_type</span><span class="special">&amp;);</span>
  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">/=</span> <span class="special">(</span><span class="keyword">int</span><span class="special">);</span>
  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">/</span>  <span class="special">(</span><span class="keyword">int</span><span class="special">);</span>
  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">*</span>  <span class="special">(</span><span class="keyword">int</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">*=</span> <span class="special">(</span><span class="keyword">int</span><span class="special">);</span>

  <span class="comment">//Sign inversion
</span>  <span class="identifier">date_duration</span> <span class="keyword">operator</span><span class="special">-()</span> <span class="keyword">const</span><span class="special">;</span>

  <span class="comment">//! return sign information (todo?)
</span>  <span class="keyword">bool</span> <span class="identifier">is_negative</span><span class="special">()</span> <span class="keyword">const</span>
<span class="special">};</span>
</pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.time_durations"></a><h3><a name="id280054"></a>
      Time Durations
    </h3><pre class="programlisting">
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">time_impl</span><span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">basic_time_duration</span> 
<span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="identifier">duration_type</span><span class="special">;</span>  <span class="comment">//the subclass
</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_impl</span><span class="special">::</span><span class="identifier">day_type</span>  <span class="identifier">day_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_impl</span><span class="special">::</span><span class="identifier">hour_type</span> <span class="identifier">hour_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_impl</span><span class="special">::</span><span class="identifier">min_type</span>  <span class="identifier">min_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_impl</span><span class="special">::</span><span class="identifier">sec_type</span>  <span class="identifier">sec_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_impl</span><span class="special">::</span><span class="identifier">fractional_seconds_type</span> <span class="identifier">fractional_seconds_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_impl</span><span class="special">::</span><span class="identifier">tick_type</span> <span class="identifier">tick_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_impl</span><span class="special">::</span><span class="identifier">impl_type</span> <span class="identifier">impl_type</span><span class="special">;</span>

  <span class="identifier">time_duration</span><span class="special">();</span>
  <span class="identifier">time_duration</span><span class="special">(</span><span class="identifier">hour_type</span> <span class="identifier">hours</span><span class="special">,</span> 
                <span class="identifier">min_type</span> <span class="identifier">minutes</span><span class="special">,</span> 
                <span class="identifier">sec_type</span> <span class="identifier">seconds</span><span class="special">=</span><span class="number">0</span><span class="special">,</span>
                <span class="identifier">fractional_seconds_type</span> <span class="identifier">frac_sec</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span>

  <span class="identifier">time_duration</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_duration</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">rep_type</span><span class="special">&gt;&amp;</span> <span class="identifier">other</span><span class="special">)</span>
  <span class="identifier">time_duration</span><span class="special">(</span><span class="identifier">special_values</span> <span class="identifier">sv</span><span class="special">);</span>

  <span class="comment">//traits information
</span>  <span class="keyword">static</span> <span class="identifier">duration_type</span> <span class="identifier">unit</span><span class="special">();</span> <span class="comment">//support for periods
</span>  <span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="keyword">short</span> <span class="identifier">num_fractional_digits</span><span class="special">();</span>
  <span class="keyword">static</span> <span class="identifier">tick_type</span> <span class="identifier">ticks_per_second</span><span class="special">();</span>
  <span class="keyword">static</span> <span class="identifier">time_resolutions</span> <span class="identifier">resolution</span><span class="special">();</span>

  <span class="identifier">hour_type</span> <span class="identifier">hours</span><span class="special">()</span>   <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">min_type</span> <span class="identifier">minutes</span><span class="special">()</span>  <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">sec_type</span> <span class="identifier">seconds</span><span class="special">()</span>  <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">fractional_seconds_type</span> <span class="identifier">fractional_seconds</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>

  <span class="identifier">sec_type</span>  <span class="identifier">total_seconds</span><span class="special">()</span>      <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">tick_type</span> <span class="identifier">total_milliseconds</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">tick_type</span> <span class="identifier">total_nanoseconds</span><span class="special">()</span>  <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">tick_type</span> <span class="identifier">total_microseconds</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>

  <span class="comment">//special value accessors
</span>  <span class="keyword">bool</span> <span class="identifier">is_special</span><span class="special">()</span> <span class="keyword">const</span><span class="special">();</span>
  <span class="identifier">special_values</span> <span class="identifier">as_special</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>


  <span class="comment">//comparison operatators
</span>  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_duration</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_duration</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_duration</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_duration</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_duration</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_duration</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>


  <span class="comment">//sign inversion
</span>  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">-()</span> <span class="keyword">const</span>

  <span class="comment">//arithmetic operations
</span>  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">-</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">duration_type</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">)</span> <span class="keyword">const</span>
  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="identifier">duration_type</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">)</span>
  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">+</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">duration_type</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">)</span> <span class="keyword">const</span>
  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="identifier">duration_type</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">)</span>
  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">/</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">divisor</span><span class="special">)</span> <span class="keyword">const</span>
  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">/=(</span><span class="keyword">int</span> <span class="identifier">divisor</span><span class="special">)</span> 
  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">*</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span>
  <span class="identifier">duration_type</span> <span class="keyword">operator</span><span class="special">*=(</span><span class="keyword">int</span> <span class="identifier">divisor</span><span class="special">)</span> 

  <span class="identifier">tick_type</span> <span class="identifier">ticks</span><span class="special">()</span> <span class="keyword">const</span> 

<span class="special">};</span>



<span class="comment">//typedef to the given resolution
</span>
<span class="comment">//Concrete Time Duration instanciations
</span><span class="keyword">class</span> <span class="identifier">hours</span><span class="special">;</span>
<span class="keyword">class</span> <span class="identifier">minutes</span><span class="special">;</span>
<span class="keyword">class</span> <span class="identifier">seconds</span><span class="special">;</span>
<span class="keyword">class</span> <span class="identifier">milliseconds</span><span class="special">;</span>
<span class="keyword">class</span> <span class="identifier">microseconds</span><span class="special">;</span>
<span class="keyword">class</span> <span class="identifier">nanoseconds</span><span class="special">;</span>
</pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_time_duration___constructors"></a><h4><a name="id281741"></a>
      Template class basic_time_duration - constructors
    </h4><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_time_duration___arithmetic_operators"></a><h4><a name="id281755"></a>
      Template class basic_time_duration - arithmetic operators
    </h4><p>
      <span class="emphasis"><em>Effects:</em></span>
    </p><p>
      <span class="emphasis"><em>Remarks:</em></span>
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date_time"></a><h3><a name="id281781"></a>
      Template Class basic_date_time
    </h3><pre class="programlisting">
<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">time_impl</span><span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">basic_date_time</span>
<span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_impl</span><span class="special">::</span><span class="identifier">time_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_impl</span><span class="special">::</span><span class="identifier">time_rep_type</span> <span class="identifier">time_rep_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_impl</span><span class="special">::</span><span class="identifier">date_type</span> <span class="identifier">date_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_impl</span><span class="special">::</span><span class="identifier">date_duration_type</span> <span class="identifier">date_duration_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_impl</span><span class="special">::</span><span class="identifier">time_duration_type</span> <span class="identifier">time_duration_type</span><span class="special">;</span>
  
  <span class="identifier">basic_date_time</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">date_type</span><span class="special">&amp;</span> <span class="identifier">day</span><span class="special">,</span> 
                  <span class="keyword">const</span> <span class="identifier">time_duration_type</span><span class="special">&amp;</span> <span class="identifier">td</span><span class="special">);</span>
  <span class="identifier">base_date_time</span><span class="special">(</span><span class="identifier">special_values</span> <span class="identifier">sv</span><span class="special">)</span>
  <span class="identifier">base_date_time</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_rep_type</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>

  <span class="comment">//accessors
</span>  <span class="identifier">date_type</span> <span class="identifier">date</span><span class="special">()</span>  <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">time_duration_type</span> <span class="identifier">time_of_day</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="identifier">is_special</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">special_value</span> <span class="identifier">as_special</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>

  <span class="comment">//comparison operators
</span>  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_type</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_type</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_type</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_type</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_type</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_type</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>

  <span class="comment">//arithmetic operators
</span>  <span class="identifier">time_duration_type</span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="identifier">time_type</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">time_type</span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="identifier">date_duration_type</span><span class="special">&amp;</span> <span class="identifier">dd</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">time_type</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="identifier">date_duration_type</span><span class="special">&amp;</span> <span class="identifier">dd</span><span class="special">);</span>
  <span class="identifier">time_type</span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="identifier">date_duration_type</span><span class="special">&amp;</span> <span class="identifier">dd</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">time_type</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="identifier">date_duration_type</span><span class="special">&amp;</span> <span class="identifier">dd</span><span class="special">);</span>
  <span class="identifier">time_type</span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="identifier">time_duration_type</span><span class="special">&amp;</span> <span class="identifier">td</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">time_type</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="identifier">time_duration_type</span><span class="special">&amp;</span> <span class="identifier">td</span><span class="special">);</span>
  <span class="identifier">time_type</span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="identifier">time_duration_type</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">time_type</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="identifier">time_duration_type</span><span class="special">&amp;</span> <span class="identifier">td</span><span class="special">);</span>
  
<span class="special">};</span>

<span class="identifier">basic_date_time</span> <span class="keyword">operator</span><span class="special">+</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date_time</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">months</span><span class="special">&amp;</span> <span class="identifier">m</span><span class="special">)</span>
<span class="identifier">basic_date_time</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="identifier">basic_date_time</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">months</span><span class="special">&amp;</span> <span class="identifier">m</span><span class="special">)</span>
<span class="identifier">basic_date_time</span> <span class="keyword">operator</span><span class="special">-</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date_time</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">months</span><span class="special">&amp;</span> <span class="identifier">m</span><span class="special">)</span>
<span class="identifier">basic_date_time</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="identifier">basic_date_time</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">months</span><span class="special">&amp;</span> <span class="identifier">m</span><span class="special">)</span>

<span class="identifier">basic_date_time</span> <span class="keyword">operator</span><span class="special">+</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date_time</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">years</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span>
<span class="identifier">basic_date_time</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="identifier">basic_date_time</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">years</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span>
<span class="identifier">basic_date_time</span> <span class="keyword">operator</span><span class="special">-</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_date_time</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">years</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span>
<span class="identifier">basic_date_time</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="identifier">basic_date_time</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">years</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span>
</pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date_time___typedefs"></a><h4><a name="id283511"></a>
      Template Class basic_date_time - typedefs
    </h4><p>
      To Be Specified
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date_time___constructors"></a><h4><a name="id283528"></a>
      Template Class basic_date_time - constructors
    </h4><p>
      To Be Specified
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date_time___comparison_operators"></a><h4><a name="id283546"></a>
      Template Class basic_date_time - comparison operators
    </h4><p>
      To Be Specified
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_date_time___arithmetic_operators"></a><h4><a name="id283563"></a>
      Template Class basic_date_time - arithmetic operators
    </h4><p>
      To Be Specified
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.basic_time_period"></a><h3><a name="id283579"></a>
      Basic Time Period
    </h3><p>
      Provides a generalized interval for use with date and time types.
    </p><p>
      A time period can be specified by providing either the begining point and a
      duration or the begining point and the end point. The end is NOT part of the
      period but 1 unit past it. A period will be "null" if either end_point
      &lt;= begin_point or the given duration is &lt;= 0. Any non-null period will
      return false for is_null().
    </p><pre class="programlisting">
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">point_rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">duration_rep</span><span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">basic_time_period</span> 
<span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="keyword">typedef</span> <span class="identifier">point_rep</span>    <span class="identifier">point_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">duration_rep</span> <span class="identifier">duration_type</span><span class="special">;</span>
  
  <span class="comment">//constructors
</span>  <span class="identifier">basic_time_period</span><span class="special">(</span><span class="identifier">point_type</span> <span class="identifier">first_point</span><span class="special">,</span> <span class="identifier">point_type</span> <span class="identifier">end_point</span><span class="special">);</span>
  <span class="identifier">basic_time_period</span><span class="special">(</span><span class="identifier">point_type</span> <span class="identifier">first_point</span><span class="special">,</span> <span class="identifier">duration_type</span> <span class="identifier">len</span><span class="special">);</span>

  <span class="comment">//basic accessors
</span>  <span class="identifier">point_rep</span> <span class="identifier">begin</span><span class="special">()</span>     <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">point_rep</span> <span class="identifier">end</span><span class="special">()</span>       <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">point_rep</span> <span class="identifier">last</span><span class="special">()</span>      <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">duration_rep</span> <span class="identifier">length</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="identifier">is_null</span><span class="special">()</span>        <span class="keyword">const</span><span class="special">;</span>

  <span class="comment">//specialized accessors
</span>  <span class="keyword">bool</span> <span class="identifier">contains</span>    <span class="special">(</span><span class="keyword">const</span> <span class="identifier">point_type</span><span class="special">&amp;</span> <span class="identifier">point</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="identifier">contains</span>    <span class="special">(</span><span class="keyword">const</span> <span class="identifier">period</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span>    <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="identifier">intersects</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">period</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span>    <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="identifier">is_adjacent</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">period</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span>    <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="identifier">is_before</span>   <span class="special">(</span><span class="keyword">const</span> <span class="identifier">point_type</span><span class="special">&amp;</span> <span class="identifier">point</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="identifier">is_after</span>    <span class="special">(</span><span class="keyword">const</span> <span class="identifier">point_type</span><span class="special">&amp;</span> <span class="identifier">point</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">basic_time_period</span> <span class="identifier">intersection</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_time_period</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">basic_time_period</span> <span class="identifier">merge</span>        <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_time_period</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">basic_time_period</span> <span class="identifier">span</span>         <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_time_period</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">basic_time_period</span> <span class="identifier">expand</span>       <span class="special">(</span><span class="keyword">const</span> <span class="identifier">duration_type</span><span class="special">&amp;</span> <span class="identifier">len</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">basic_time_period</span> <span class="identifier">shift</span>        <span class="special">(</span><span class="keyword">const</span> <span class="identifier">duration_rep</span><span class="special">&amp;</span> <span class="identifier">len</span><span class="special">);</span>

  <span class="comment">//comparison operators
</span>  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">period</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">period</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">period</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">period</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">period</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">period</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>


<span class="special">};</span>
</pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_time_period___template_parameter_types"></a><h4><a name="id284806"></a>
      Template class basic_time_period - template parameter types
    </h4><pre class="programlisting">
<span class="identifier">point_rep</span> <span class="keyword">and</span> <span class="identifier">duration_rep</span> <span class="special">(</span><span class="identifier">TODO</span><span class="special">:</span> <span class="identifier">fix</span> <span class="identifier">me</span><span class="special">)</span>
</pre><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
        The basic_time_period will have implementation-defined date members to represent
        the beginning and end of the period. For example, an implemenation could
        use point<span class="underline">rep begin</span> and point<span class="underline">rep last</span>. These data members are used to implement
        all of the accessors and operations on the period. Implementations are free
        optimize this combination of values.
      </p></div><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_time_period___constructors"></a><h4><a name="id284894"></a>
      Template class basic_time_period - constructors
    </h4><pre class="programlisting">
<span class="identifier">basic_time_period</span><span class="special">(</span><span class="identifier">point_type</span> <span class="identifier">first_point</span><span class="special">,</span> <span class="identifier">point_type</span> <span class="identifier">end_point</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Construct a period from a starting point and
      a non-inclusive end point.
    </p><pre class="programlisting">If passed a start time of 3 and an end time of 6 the following interval would be constructed

            [-------]
    ^   ^   ^   ^   ^   ^  ^
    1   2   3   4   5   6  7
</pre><p>
      If end_point &lt; first_point then the period is a null period. If end_point
      == first_point then the period has a zero length.
    </p><p>
      <span class="emphasis"><em>Effects:</em></span> Set the internal data members to represent the
      specfied period.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> None.
    </p><pre class="programlisting">
<span class="identifier">basic_time_period</span><span class="special">(</span><span class="identifier">point_type</span> <span class="identifier">first_point</span><span class="special">,</span> <span class="identifier">duration_type</span> <span class="identifier">duration</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Remarks:</em></span> Construct a period from a starting point in time
      and a time length.
    </p><pre class="programlisting">If passed a start time of 3 and a duration of 2 the following interval would be constructed

            [-------]
    ^   ^   ^   ^   ^   ^  ^
    1   2   3   4   5   6  7
</pre><p>
      If duration is negative then the period is a null period. If duration is zero
      then the period has a zero length.
    </p><p>
      <span class="emphasis"><em>Effects:</em></span> Set the internal data members to represent the
      specfied period.
    </p><p>
      <span class="emphasis"><em>Throws:</em></span> None.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_time_period___basic_accessors"></a><h4><a name="id285068"></a>
      Template class basic_time_period - basic accessors
    </h4><pre class="programlisting">
<span class="identifier">point_rep</span> <span class="identifier">begin</span><span class="special">()</span>     <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> The first time point in the interval.
    </p><pre class="programlisting">
<span class="identifier">point_rep</span> <span class="identifier">end</span><span class="special">()</span>       <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> One past the last time point of the interval.
    </p><pre class="programlisting">If an interval from 3 to 5 is specified 6 is returned.

            [-------]
    ^   ^   ^   ^   ^   ^  ^
    1   2   3   4   5   6  7
                        ^
</pre><pre class="programlisting">
<span class="identifier">point_rep</span> <span class="identifier">last</span><span class="special">()</span>      <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> the last time point included in the interval.
    </p><pre class="programlisting">If an interval from 3 to 5 is specified 5 is returned.

            [-------]
    ^   ^   ^   ^   ^   ^  ^
    1   2   3   4   5   6  7
                    ^
</pre><pre class="programlisting">
<span class="identifier">duration_rep</span> <span class="identifier">length</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Time duration between period.start() and period.end()
    </p><pre class="programlisting">Example: if an interval from 3 to 5 is specified 2 is returned.

            [-------]
    ^   ^   ^   ^   ^   ^  ^
    1   2   3   4   5   6  7                    
</pre><pre class="programlisting">
<span class="keyword">bool</span> <span class="identifier">is_null</span><span class="special">()</span>        <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> True if the period.last &lt; period.start
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_time_period___specialized_accessors"></a><h4><a name="id285296"></a>
      Template class basic_time_period - specialized accessors
    </h4><pre class="programlisting">
<span class="keyword">bool</span> <span class="identifier">contains</span>    <span class="special">(</span><span class="keyword">const</span> <span class="identifier">point_type</span><span class="special">&amp;</span> <span class="identifier">point</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> True if the time point is contained in the interval.
      ((point &gt;= begin<span class="underline">) &amp;&amp; (point &lt;= last</span>))
      Zero length and null intervals return false for all values.
    </p><pre class="programlisting">Example: if a time interval from 3 to 5 is specified values 3, 4 and 5
     will return true, all others return false.

            [-------]
    ^   ^   ^   ^   ^   ^  ^
    1   2   3   4   5   6  7
    f   f   t   t   t   f  f                    
</pre><pre class="programlisting">
<span class="keyword">bool</span> <span class="identifier">contains</span>    <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_time_period</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span>    <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> True if the time period is completely contained.
      ((begin &lt;= other.begin) &amp;&amp; (last &gt;= other.last)) Zero length
      and null intervals return false for values.
    </p><pre class="programlisting">Example: P1 contains p2 and p3.
          <span class="strikethrough">--p1---</span>
          <span class="strikethrough">--p2---</span>
           <span class="strikethrough">p3-</span>
                    <span class="strikethrough">--p4---</span>
    <span class="strikethrough">p5-</span> 
</pre><pre class="programlisting">
<span class="keyword">bool</span> <span class="identifier">intersects</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_time_period</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span>    <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> True if the time period is completely contained.
      Zero length and null intervals return false for values.
    </p><pre class="programlisting">In the example below p1 intersects with p2, p4, and p6.
          [---p1---]
                [---p2---]
                   [---p3---]
     [---p4---]
    [-p5-] 
            [-p6-</pre><p>
      ]
    </p><pre class="programlisting">
<span class="keyword">bool</span> <span class="identifier">is_adjacent</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_time_period</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span>    <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> True if periods are next to each other without
      a gap.
    </p><pre class="programlisting">Example: p1 and p2 are adjacent, but p3 is not adjacent
     with either of p1 or p2.
      [-p1-)
           [-p2-)
             [-p3-) 
</pre><pre class="programlisting">
<span class="keyword">bool</span> <span class="identifier">is_before</span>   <span class="special">(</span><span class="keyword">const</span> <span class="identifier">point_type</span><span class="special">&amp;</span> <span class="identifier">point</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> True point &lt; period.start.
    </p><pre class="programlisting">Example: If a time interval from 3 to 5 is values 1 and 2
     will return true, all others return false.

            [-------]
    ^   ^   ^   ^   ^   ^  ^
    1   2   3   4   5   6  7
    t   t   f   f   f   f  f                    
</pre><pre class="programlisting">
<span class="keyword">bool</span> <span class="identifier">is_after</span>    <span class="special">(</span><span class="keyword">const</span> <span class="identifier">point_type</span><span class="special">&amp;</span> <span class="identifier">point</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> True point &lt; period.last
    </p><pre class="programlisting">Example: If a time interval from 3 to 5 is values 1 and 2
     will return true, all others return false.

            [-------]
    ^   ^   ^   ^   ^   ^  ^
    1   2   3   4   5   6  7
    f   f   f   f   f   t  t                    
</pre><pre class="programlisting">
<span class="identifier">basic_time_period</span> <span class="identifier">intersection</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_time_period</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns time period that represents the intersection
      of two time time periods. Null and zero length time periods return null time
      period of unspecified value.
    </p><pre class="programlisting">Example the intersection of 3,7 with 2,4 is 3,4
     will return true, all others return false.
        [-------]
            [-------]
result-&gt;    [---]
    ^   ^   ^   ^   ^   ^  ^
    1   2   3   4   5   6  7
</pre><pre class="programlisting">
<span class="identifier">basic_time_period</span> <span class="identifier">merge</span>        <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_time_period</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns merging the union of two intesecting
      periods or an unspecified null period if the two periods do not intersect.
      Null and zero length time periods return null time period of unspecified value.
    </p><pre class="programlisting">Example merge of 3,7 with 2,4 is 3,4
     will return true, all others return false.
        [-------]
            [-------]
result-&gt;[-----------]
    ^   ^   ^   ^   ^   ^  ^
    1   2   3   4   5   6  7
</pre><pre class="programlisting">
<span class="identifier">basic_time_period</span> <span class="identifier">span</span>         <span class="special">(</span><span class="keyword">const</span> <span class="identifier">basic_time_period</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns a period defined by min(p1.start, p2.start)
      max(p1.last, p2.last)
    </p><pre class="programlisting">Example span of 2,3 with 4,6 is 2,6
        [---]
                [------]
result-&gt;[--------------]
    ^   ^   ^   ^   ^   ^  ^
    1   2   3   4   5   6  7
</pre><pre class="programlisting">
<span class="identifier">basic_time_period</span> <span class="identifier">expand</span>       <span class="special">(</span><span class="keyword">const</span> <span class="identifier">duration_type</span><span class="special">&amp;</span> <span class="identifier">len</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns a period defined by start-len, last+len.
    </p><pre class="programlisting">Example: expand of 3,5 by 2 is 1,7
                [--------]
result-&gt; [----------------------]
         ^   ^   ^   ^   ^   ^  ^
         1   2   3   4   5   6  7
</pre><pre class="programlisting">
<span class="identifier">basic_time_period</span> <span class="identifier">shift</span>        <span class="special">(</span><span class="keyword">const</span> <span class="identifier">duration_rep</span><span class="special">&amp;</span> <span class="identifier">len</span><span class="special">);</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns a period defined by start+len, last+len.
    </p><pre class="programlisting">Example: shift of 3,5 by -2 is 1,3
                 [-------]
result-&gt; [-------]
         ^   ^   ^   ^   ^   ^   ^
         1   2   3   4   5   6   7
</pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_basic_time_period___comparison_operators"></a><h4><a name="id286145"></a>
      Template class basic_time_period - comparison operators
    </h4><p>
      Comparison operators implemented strictly in terms of the period start value.
    </p><pre class="programlisting">
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">period</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns true if this.start &lt; rhs.start.
    </p><pre class="programlisting">
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">period</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      <span class="emphasis"><em>Returns:</em></span> Returns true if this.start <code class="literal">= rhs.start
      and this.last =</code> rhs.last
    </p><pre class="programlisting">
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">period</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;</span>  <span class="special">(</span><span class="keyword">const</span> <span class="identifier">period</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">period</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">period</span><span class="special">&amp;)</span> <span class="keyword">const</span><span class="special">;</span>
</pre><p>
      The remaining operators can be defined as expected based on operator&lt; and
      operator==.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_time_zone_base"></a><h3><a name="id286494"></a>
      template class time_zone_base
    </h3><pre class="programlisting">
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">CharT</span> <span class="special">=</span> <span class="keyword">char</span><span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">time_zone_base</span>  <span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="identifier">string_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_stringstream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="identifier">stringstream_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">::</span><span class="identifier">date_type</span><span class="special">::</span><span class="identifier">year_type</span> <span class="identifier">year_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">::</span><span class="identifier">time_duration_type</span> <span class="identifier">time_duration_type</span><span class="special">;</span>

  <span class="identifier">time_zone_base</span><span class="special">()</span> <span class="special">{};</span>
  <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">time_zone_base</span><span class="special">()</span> <span class="special">{};</span>
 
  <span class="comment">//Time zone names information
</span>  <span class="keyword">virtual</span> <span class="identifier">string_type</span> <span class="identifier">dst_zone_abbrev</span><span class="special">()</span> <span class="keyword">const</span><span class="special">=</span><span class="number">0</span><span class="special">;</span>
  <span class="keyword">virtual</span> <span class="identifier">string_type</span> <span class="identifier">std_zone_abbrev</span><span class="special">()</span> <span class="keyword">const</span><span class="special">=</span><span class="number">0</span><span class="special">;</span>
  <span class="keyword">virtual</span> <span class="identifier">string_type</span> <span class="identifier">dst_zone_name</span><span class="special">()</span>   <span class="keyword">const</span><span class="special">=</span><span class="number">0</span><span class="special">;</span>
  <span class="keyword">virtual</span> <span class="identifier">string_type</span> <span class="identifier">std_zone_name</span><span class="special">()</span>   <span class="keyword">const</span><span class="special">=</span><span class="number">0</span><span class="special">;</span>

  <span class="comment">//Offsets from UTC
</span>  <span class="keyword">virtual</span> <span class="identifier">time_duration_type</span> <span class="identifier">base_utc_offset</span><span class="special">()</span>                 <span class="keyword">const</span><span class="special">=</span><span class="number">0</span><span class="special">;</span>
  <span class="keyword">virtual</span> <span class="identifier">time_duration_type</span> <span class="identifier">dst_offset</span><span class="special">()</span>                      <span class="keyword">const</span><span class="special">=</span><span class="number">0</span><span class="special">;</span>

  <span class="comment">//Daylight savings details
</span>  <span class="keyword">virtual</span> <span class="keyword">bool</span>               <span class="identifier">has_dst</span><span class="special">()</span>                         <span class="keyword">const</span><span class="special">=</span><span class="number">0</span><span class="special">;</span>
  <span class="keyword">virtual</span> <span class="identifier">time_type</span>          <span class="identifier">dst_local_start_time</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">=</span><span class="number">0</span><span class="special">;</span>
  <span class="keyword">virtual</span> <span class="identifier">time_type</span>          <span class="identifier">dst_local_end_time</span>  <span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">=</span><span class="number">0</span><span class="special">;</span>

  <span class="comment">//Printing function
</span>  <span class="keyword">virtual</span> <span class="identifier">string_type</span>        <span class="identifier">to_posix_string</span><span class="special">()</span>                 <span class="keyword">const</span><span class="special">=</span><span class="number">0</span><span class="special">;</span>
  
<span class="special">};</span>
</pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.concrete_temporal_types"></a><h2><a name="id287270"></a>
      Concrete Temporal Types
    </h2><p>
      The following typedefs will constitute the primary user programming interface.
    </p><pre class="programlisting">
<span class="comment">//Date Programming
</span>
<span class="keyword">typedef</span> <span class="identifier">basic_date</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>                  <span class="identifier">date</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">basic_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>              <span class="identifier">days</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">basic_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>              <span class="identifier">weeks</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">basic_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>              <span class="identifier">months</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">basic_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>              <span class="identifier">years</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">basic_time_period</span><span class="special">&lt;</span><span class="identifier">date</span><span class="special">,</span> <span class="identifier">days</span><span class="special">&gt;</span>    <span class="identifier">date_period</span><span class="special">;</span>
  <span class="comment">//Time Programming
</span><span class="keyword">typedef</span> <span class="identifier">basic_date_time</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>             <span class="identifier">date_time</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">basic_time_duration</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>          <span class="identifier">hours</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">basic_time_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>         <span class="identifier">minutes</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">basic_time_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>         <span class="identifier">seconds</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">basic_time_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>         <span class="identifier">milliseconds</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">basic_time_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>         <span class="identifier">microseconds</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">basic_time_duration</span><span class="special">&lt;</span><span class="emphasis"><em>implementation-defined</em></span><span class="special">&gt;</span>         <span class="identifier">nanoseconds</span><span class="special">;</span>
<span class="keyword">typedef</span> <span class="identifier">basic_time_period</span><span class="special">&lt;</span><span class="identifier">date_time</span><span class="special">,</span> <span class="identifier">milliseconds</span><span class="special">&gt;</span>                 <span class="identifier">date_time_period</span><span class="special">;</span>
</pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.additional_types"></a><h2><a name="id287789"></a>
      Additional Types
    </h2><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.time_zone_types"></a><h3><a name="id287802"></a>
      Time Zone Types
    </h3><p>
      The following time zone classes provide the basis for specification and management
      of local time conversions.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_time_zone"></a><h4><a name="id287819"></a>
      template class time_zone
    </h4><pre class="programlisting">
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span> <span class="special">=</span> <span class="keyword">char</span><span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">time_zone_names_base</span>
<span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="identifier">string_type</span><span class="special">;</span>
  <span class="identifier">time_zone_names_base</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">string_type</span><span class="special">&amp;</span> <span class="identifier">std_zone_name</span><span class="special">,</span>
                       <span class="keyword">const</span> <span class="identifier">string_type</span><span class="special">&amp;</span> <span class="identifier">std_zone_abbrev</span><span class="special">,</span>
                       <span class="keyword">const</span> <span class="identifier">string_type</span><span class="special">&amp;</span> <span class="identifier">dst_zone_name</span><span class="special">,</span>
                       <span class="keyword">const</span> <span class="identifier">string_type</span><span class="special">&amp;</span> <span class="identifier">dst_zone_abbrev</span><span class="special">)</span> 
  <span class="special">{}</span>
  <span class="identifier">string_type</span> <span class="identifier">dst_zone_abbrev</span><span class="special">()</span> <span class="keyword">const</span>
  <span class="identifier">string_type</span> <span class="identifier">std_zone_abbrev</span><span class="special">()</span> <span class="keyword">const</span>
  <span class="identifier">string_type</span> <span class="identifier">dst_zone_name</span><span class="special">()</span> <span class="keyword">const</span>
  <span class="identifier">string_type</span> <span class="identifier">std_zone_name</span><span class="special">()</span> <span class="keyword">const</span>
<span class="special">};</span>


<span class="comment">//Timezone base type 
</span><span class="keyword">class</span> <span class="identifier">time_zone</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">time_zone_base</span><span class="special">&lt;&gt;</span> <span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">::</span><span class="identifier">year_type</span> <span class="identifier">year_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">posix_time</span><span class="special">::</span><span class="identifier">time_duration</span> <span class="identifier">time_duration_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">time_zone_base</span> <span class="identifier">base_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">string_type</span> <span class="identifier">string_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">stringstream_type</span> <span class="identifier">stringstream_type</span><span class="special">;</span>

  <span class="identifier">time_zone</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_zone_names</span><span class="special">&amp;</span> <span class="identifier">zone_names</span><span class="special">,</span>   
            <span class="keyword">const</span> <span class="identifier">time_duration_type</span><span class="special">&amp;</span> <span class="identifier">base_utc_offset</span><span class="special">,</span>
            <span class="keyword">const</span> <span class="identifier">dst_adjustment_offsets</span><span class="special">&amp;</span> <span class="identifier">dst_offset</span><span class="special">,</span>
            <span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special">&lt;</span><span class="identifier">dst_calc_rule</span><span class="special">&gt;</span> <span class="identifier">calc_rule</span><span class="special">)</span> <span class="special">:</span>
  <span class="special">{};</span>
  <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">time_zone</span><span class="special">()</span> <span class="special">{};</span>
  <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">dst_zone_abbrev</span><span class="special">()</span> <span class="keyword">const</span>
  <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">std_zone_abbrev</span><span class="special">()</span> <span class="keyword">const</span>
  <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">dst_zone_name</span><span class="special">()</span> <span class="keyword">const</span>
  <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">std_zone_name</span><span class="special">()</span> <span class="keyword">const</span>
  <span class="keyword">virtual</span> <span class="keyword">bool</span> <span class="identifier">has_dst</span><span class="special">()</span> <span class="keyword">const</span>
  <span class="keyword">virtual</span> <span class="identifier">date_time</span> <span class="identifier">dst_local_start_time</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span>
  <span class="keyword">virtual</span> <span class="identifier">date_time</span> <span class="identifier">dst_local_end_time</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span>
  <span class="keyword">virtual</span> <span class="identifier">time_duration_type</span> <span class="identifier">base_utc_offset</span><span class="special">()</span> <span class="keyword">const</span>
  <span class="keyword">virtual</span> <span class="identifier">time_duration_type</span> <span class="identifier">dst_offset</span><span class="special">()</span> <span class="keyword">const</span>
  <span class="keyword">virtual</span> <span class="identifier">string_type</span> <span class="identifier">to_posix_string</span><span class="special">()</span> <span class="keyword">const</span>
<span class="special">};</span>
</pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_posix_time_zone"></a><h4><a name="id288877"></a>
      template class posix_time_zone
    </h4><p>
      Posix time zone leverages one of the most widely used specifcations of timezones
      to provide for the calculation of local times.
    </p><pre class="programlisting">
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">charT</span><span class="special">=</span><span class="keyword">char</span><span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">posix_time_zone</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">time_zone</span><span class="special">&lt;</span><span class="identifier">time_type</span><span class="special">,</span> <span class="identifier">charT</span><span class="special">&gt;</span>  <span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">::</span><span class="identifier">year_type</span> <span class="identifier">year_type</span><span class="special">;</span>

  <span class="identifier">posix_time_zone</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&amp;</span> <span class="identifier">s</span><span class="special">);</span>
  <span class="keyword">virtual</span> <span class="special">~</span><span class="identifier">posix_time_zone</span><span class="special">();</span>

  <span class="comment">//various zone name strings
</span>  <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">std_zone_abbrev</span><span class="special">()</span> <span class="keyword">const</span>
  <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">dst_zone_abbrev</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">std_zone_name</span><span class="special">()</span>   <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">virtual</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">dst_zone_name</span><span class="special">()</span>   <span class="keyword">const</span><span class="special">;</span>

  <span class="keyword">virtual</span> <span class="keyword">bool</span> <span class="identifier">has_dst</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>

  <span class="comment">//calculate start / end of dst
</span>  <span class="keyword">virtual</span> <span class="identifier">time_type</span> <span class="identifier">dst_local_start_time</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">virtual</span> <span class="identifier">time_type</span> <span class="identifier">dst_local_end_time</span><span class="special">(</span><span class="identifier">year_type</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>

  <span class="keyword">virtual</span> <span class="identifier">time_duration_type</span> <span class="identifier">base_utc_offset</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="keyword">virtual</span> <span class="identifier">time_duration_type</span> <span class="identifier">dst_offset</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>

  <span class="comment">//! Returns a POSIX time_zone string for this object
</span>  <span class="keyword">virtual</span> <span class="identifier">string_type</span> <span class="identifier">to_posix_string</span><span class="special">()</span> <span class="keyword">const</span>
<span class="special">};</span>
</pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.clock_types"></a><h3><a name="id289515"></a>
      Clock Types
    </h3><p>
      The following types interact with the local computer clock to retrieve the
      current or UTC time. The different clocks provide time values with different
      levels of resolution.
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_day_clock"></a><h4><a name="id289533"></a>
      template class day_clock
    </h4><pre class="programlisting">
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">date_type</span><span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">day_clock</span>
<span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="comment">//returns a time adjusted to the specified time zone
</span>  <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">time_zone_type</span><span class="special">&gt;</span>
  <span class="keyword">static</span> <span class="identifier">date_type</span> <span class="identifier">local_time</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_zone_type</span><span class="special">&amp;</span> <span class="identifier">zone_spec</span><span class="special">);</span>

  <span class="keyword">static</span> <span class="identifier">date_type</span> <span class="identifier">local_time</span><span class="special">();</span>
  <span class="keyword">static</span> <span class="identifier">date_type</span> <span class="identifier">universal_time</span><span class="special">();</span>
<span class="special">};</span>
</pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_microsecond_clock"></a><h4><a name="id289731"></a>
      template class microsecond_clock
    </h4><pre class="programlisting">
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">time_type</span><span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">microsecond_clock</span>
<span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="comment">//returns a time adjusted to the specified time zone
</span>  <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">time_zone_type</span><span class="special">&gt;</span>
  <span class="keyword">static</span> <span class="identifier">time_type</span> <span class="identifier">local_time</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_zone_type</span><span class="special">&amp;</span> <span class="identifier">zone_spec</span><span class="special">);</span>

  <span class="keyword">static</span> <span class="identifier">time_type</span> <span class="identifier">local_time</span><span class="special">();</span>
  <span class="keyword">static</span> <span class="identifier">time_type</span> <span class="identifier">universal_time</span><span class="special">();</span>
<span class="special">};</span>
</pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_second_clock"></a><h4><a name="id289929"></a>
      template class second_clock
    </h4><pre class="programlisting">
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">time_type</span><span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">second_clock</span>
<span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="comment">//returns a time adjusted to the specified time zone
</span>  <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">time_zone_type</span><span class="special">&gt;</span>
  <span class="keyword">static</span> <span class="identifier">time_type</span> <span class="identifier">local_time</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">time_zone_type</span><span class="special">&amp;</span> <span class="identifier">zone_spec</span><span class="special">);</span>

  <span class="keyword">static</span> <span class="identifier">time_type</span> <span class="identifier">local_time</span><span class="special">();</span>
  <span class="keyword">static</span> <span class="identifier">time_type</span> <span class="identifier">universal_time</span><span class="special">();</span>
<span class="special">};</span>
</pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.date_time_input_output"></a><h2><a name="id290126"></a>
      Date Time Input-Output
    </h2><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.input_output_formatting_strings"></a><h3><a name="id290140"></a>
      Input-Output Formatting Strings
    </h3><p>
      The following are proposed additions and changes to input output formatting
      strings accepted for proposed facet classes that follow.
    </p><p>
      The following table describes the new flags to be supported by <code class="code"><span class="identifier">time_put</span></code> facet.
    </p><div class="informaltable"><h4><a name="id290165"></a>
        <span class="table-title">New Formatting Flags for Facets</span>
      </h4><table border="1"><colgroup><col><col></colgroup><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>%f</td><td>Fractional seconds and separator - always used
            even when value is zero.</td></tr><tr><td>%F</td><td>Fractional seconds and separator - only output
            when non-zero.</td></tr><tr><td>%s</td><td>Seconds separator and fractional seconds</td></tr><tr><td>%T</td><td>Time in 24-hour notation %H:%M:%S (from strftime)
            </td></tr><tr><td>%q</td><td>ISO time zone </td></tr><tr><td>%Q</td><td>ISO extended time zone </td></tr><tr><td>%r</td><td>Time in AM/PM notation - same as '%I:%M:%S %p'
            (from strftime)</td></tr><tr><td>%V</td><td>ISO week number in range from 0 to 53 (from strftime)
            </td></tr><tr><td>%Z</td><td>Time zone name - long (eg: 'Eastern Standard
            Time').</td></tr><tr><td>%ZP</td><td>Posix time zone string (eg: EST-05EDT+01,M4.1.0/02:00,M10.5.0/02:00</td></tr></tbody></table></div><p>
      The following table summarizes the proposed default i/o formats for the temporal
      types.
    </p><div class="informaltable"><h4><a name="id290298"></a>
        <span class="table-title">Preferred Formatting</span>
      </h4><table border="1"><colgroup><col><col><col><col></colgroup><thead><tr><th>Temporal Type</th><th>Format</th><th>Example</th><th>Comment</th></tr></thead><tbody><tr><td>date</td><td>%Y-%b-%d</td><td>2004-Jan-31</td><td></td></tr><tr><td>days</td><td>None</td><td>45</td><td>No formatting
            or adornment</td></tr><tr><td>date_period</td><td>[%Y-%b-%d/%Y-%b-%d)</td><td>[2004-Jan-31/2004-Feb-25]</td><td></td></tr><tr><td>date_time</td><td>%Y-%b-%d %H:%M:%S.%f</td><td>2004-Jan-31
            05:10:31.00000030</td><td></td></tr><tr><td>time duration types</td><td>%H:%M:%S.%f</td><td>05:10:31.00000030</td><td></td></tr><tr><td>date_time_period</td><td>[%Y-%b-%d %H:%M:%S.%f/%Y-%b-%d
            %H:%M:%S.%f)</td><td>[2004-Jan-31 05:10:31.00000030/2004-Feb-25
            05:10:31.00000030]</td><td></td></tr></tbody></table></div><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.input_output_classes_and_functions"></a><h3><a name="id290421"></a>
      Input-Output Classes and Functions
    </h3><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_date_output_facet"></a><h4><a name="id290434"></a>
      template class date_output_facet
    </h4><pre class="programlisting">
<span class="comment">/* Class that provides format based I/O facet for date types.
 *
 * This class allows the formatting of dates by using format string.
 * Format strings are:
 *
 *  - %A =&gt; long_weekday_format - Full name Ex: Tuesday
 *  - %a =&gt; short_weekday_format - Three letter abbreviation Ex: Tue
 *  - %B =&gt; long_month_format - Full name Ex: October
 *  - %b =&gt; short_month_format - Three letter abbreviation Ex: Oct
 *  - %x =&gt; standard_format_specifier - defined by the locale
 *  - %Y-%b-%d =&gt; default_date_format - YYYY-Mon-dd
 *
 * Default month format == %b
 * Default weekday format == %a
 *
 *
 */</span>
<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">date_type</span><span class="special">,</span>
          <span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> 
          <span class="keyword">class</span> <span class="identifier">OutItrT</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostreambuf_iterator</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">char_traits</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">date_output_facet</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span><span class="special">::</span><span class="identifier">facet</span> <span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_type</span><span class="special">::</span><span class="identifier">duration_type</span> <span class="identifier">duration_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_type</span><span class="special">::</span><span class="identifier">day_of_week_type</span> <span class="identifier">day_of_week_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_type</span><span class="special">::</span><span class="identifier">day_type</span> <span class="identifier">day_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_type</span><span class="special">::</span><span class="identifier">month_type</span> <span class="identifier">month_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">date_time</span><span class="special">::</span><span class="identifier">period</span><span class="special">&lt;</span><span class="identifier">date_type</span><span class="special">,</span><span class="identifier">duration_type</span><span class="special">&gt;</span> <span class="identifier">period_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="identifier">string_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">CharT</span>                    <span class="identifier">char_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">date_time</span><span class="special">::</span><span class="identifier">period_formatter</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span>  <span class="identifier">period_formatter_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">date_time</span><span class="special">::</span><span class="identifier">special_values_formatter</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span>  <span class="identifier">special_values_formatter_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">input_collection_type</span><span class="special">;</span>

  <span class="keyword">explicit</span> <span class="identifier">date_output_facet</span><span class="special">(::</span><span class="identifier">size_t</span> <span class="identifier">a_ref</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span>

  <span class="keyword">explicit</span> <span class="identifier">date_output_facet</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="identifier">format</span><span class="special">,</span>
                      <span class="keyword">const</span> <span class="identifier">input_collection_type</span><span class="special">&amp;</span> <span class="identifier">short_month_names</span><span class="special">,</span>
                      <span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">ref_count</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span>
   
  <span class="keyword">explicit</span> <span class="identifier">date_output_facet</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="identifier">format</span><span class="special">,</span> 
                      <span class="identifier">period_formatter_type</span> <span class="identifier">period_formatter</span> <span class="special">=</span> <span class="identifier">period_formatter_type</span><span class="special">(),</span> 
                      <span class="identifier">special_values_formatter_type</span> <span class="identifier">special_values_formatter</span> <span class="special">=</span> <span class="identifier">special_values_formatter_type</span><span class="special">(),</span>
                      <span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">ref_count</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span>

  <span class="keyword">void</span> <span class="identifier">format</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="keyword">const</span> <span class="identifier">format</span><span class="special">);</span>
  <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">set_iso_format</span><span class="special">();</span>
  <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">set_iso_extended_format</span><span class="special">();</span>
  <span class="keyword">void</span> <span class="identifier">month_format</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="keyword">const</span> <span class="identifier">format</span><span class="special">);</span>
  <span class="keyword">void</span> <span class="identifier">weekday_format</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="keyword">const</span> <span class="identifier">format</span><span class="special">);</span>
  
  <span class="keyword">void</span> <span class="identifier">period_formatter</span><span class="special">(</span><span class="identifier">period_formatter_type</span> <span class="identifier">period_formatter</span><span class="special">);</span>
  <span class="keyword">void</span> <span class="identifier">special_values_formatter</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">special_values_formatter_type</span><span class="special">&amp;</span> <span class="identifier">svf</span><span class="special">);</span>
  <span class="keyword">void</span> <span class="identifier">short_weekday_names</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">input_collection_type</span><span class="special">&amp;</span> <span class="identifier">short_weekday_names</span><span class="special">);</span>
  <span class="keyword">void</span> <span class="identifier">long_weekday_names</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">input_collection_type</span><span class="special">&amp;</span> <span class="identifier">long_weekday_names</span><span class="special">);</span>
  <span class="keyword">void</span> <span class="identifier">short_month_names</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">input_collection_type</span><span class="special">&amp;</span> <span class="identifier">short_month_names</span><span class="special">);</span>
  <span class="keyword">void</span> <span class="identifier">long_month_names</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">input_collection_type</span><span class="special">&amp;</span> <span class="identifier">long_month_names</span><span class="special">);</span>
  <span class="identifier">OutItrT</span> <span class="identifier">put</span><span class="special">(</span><span class="identifier">OutItrT</span> <span class="identifier">next</span><span class="special">,</span>  <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="identifier">a_ios</span><span class="special">,</span>  
       <span class="identifier">char_type</span> <span class="identifier">fill_char</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">date_type</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">;</span>
  <span class="identifier">OutItrT</span> <span class="identifier">put</span><span class="special">(</span><span class="identifier">OutItrT</span> <span class="identifier">next</span><span class="special">,</span>  <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="identifier">a_ios</span><span class="special">,</span> 
              <span class="identifier">char_type</span> <span class="identifier">fill_char</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">duration_type</span><span class="special">&amp;</span> <span class="identifier">dd</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">;</span>
  <span class="identifier">OutItrT</span> <span class="identifier">put</span><span class="special">(</span><span class="identifier">OutItrT</span> <span class="identifier">next</span><span class="special">,</span>  <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="identifier">a_ios</span><span class="special">,</span> 
              <span class="identifier">char_type</span> <span class="identifier">fill_char</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">month_type</span><span class="special">&amp;</span> <span class="identifier">m</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="comment">// puts the day of month
</span>  <span class="identifier">OutItrT</span> <span class="identifier">put</span><span class="special">(</span><span class="identifier">OutItrT</span> <span class="identifier">next</span><span class="special">,</span>  <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="identifier">a_ios</span><span class="special">,</span> 
              <span class="identifier">char_type</span> <span class="identifier">fill_char</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">day_type</span><span class="special">&amp;</span> <span class="identifier">day</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">OutItrT</span> <span class="identifier">put</span><span class="special">(</span><span class="identifier">OutItrT</span> <span class="identifier">next</span><span class="special">,</span>  <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="identifier">a_ios</span><span class="special">,</span> 
              <span class="identifier">char_type</span> <span class="identifier">fill_char</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">day_of_week_type</span><span class="special">&amp;</span> <span class="identifier">dow</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">OutItrT</span> <span class="identifier">put</span><span class="special">(</span><span class="identifier">OutItrT</span> <span class="identifier">next</span><span class="special">,</span>  <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="identifier">a_ios</span><span class="special">,</span> 
              <span class="identifier">char_type</span> <span class="identifier">fill_char</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">period_type</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span> <span class="keyword">const</span> 
  
<span class="special">};</span>
</pre><p>
      To Be Specified...
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_date_input_facet"></a><h4><a name="id292475"></a>
      template class date_input_facet
    </h4><pre class="programlisting">
<span class="comment">// Input facet that uses format strings to parse dates, 
</span><span class="comment">// date durations, and date periods. Like the output facet allows 
</span><span class="comment">// for customization of all strings associated with date type 
</span><span class="comment">// including days of week, month names, and special values.
</span><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">date_type</span><span class="special">,</span>
          <span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> 
          <span class="keyword">class</span> <span class="identifier">InItrT</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">istreambuf_iterator</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">char_traits</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">date_input_facet</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span><span class="special">::</span><span class="identifier">facet</span> <span class="special">{</span>
<span class="keyword">public</span><span class="special">:</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_type</span><span class="special">::</span><span class="identifier">duration_type</span> <span class="identifier">duration_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_type</span><span class="special">::</span><span class="identifier">day_of_week_type</span> <span class="identifier">day_of_week_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_type</span><span class="special">::</span><span class="identifier">day_type</span> <span class="identifier">day_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_type</span><span class="special">::</span><span class="identifier">month_type</span> <span class="identifier">month_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">date_type</span><span class="special">::</span><span class="identifier">year_type</span> <span class="identifier">year_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">basic_time_period</span><span class="special">&lt;</span><span class="identifier">date_type</span><span class="special">,</span><span class="identifier">duration_type</span><span class="special">&gt;</span> <span class="identifier">period_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="identifier">string_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">CharT</span>                    <span class="identifier">char_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">date_time</span><span class="special">::</span><span class="identifier">period_parser</span><span class="special">&lt;</span><span class="identifier">date_type</span><span class="special">,</span> <span class="identifier">CharT</span><span class="special">&gt;</span>  <span class="identifier">period_parser_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">special_values_parser</span><span class="special">&lt;</span><span class="identifier">date_type</span><span class="special">,</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="identifier">special_values_parser_type</span><span class="special">;</span> 
  <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">input_collection_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">format_date_parser</span><span class="special">&lt;</span><span class="identifier">date_type</span><span class="special">,</span> <span class="identifier">CharT</span><span class="special">&gt;</span> <span class="identifier">format_date_parser_type</span><span class="special">;</span>

  
  <span class="keyword">explicit</span> <span class="identifier">date_input_facet</span><span class="special">(::</span><span class="identifier">size_t</span> <span class="identifier">a_ref</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span>

  <span class="keyword">explicit</span> <span class="identifier">date_input_facet</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">string_type</span><span class="special">&amp;</span> <span class="identifier">format</span><span class="special">,</span>
                            <span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">a_ref</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span>

  <span class="keyword">explicit</span> <span class="identifier">date_input_facet</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">string_type</span><span class="special">&amp;</span> <span class="identifier">format</span><span class="special">,</span>
                            <span class="keyword">const</span> <span class="identifier">format_date_parser_type</span><span class="special">&amp;</span> <span class="identifier">date_parser</span><span class="special">,</span>
                            <span class="keyword">const</span> <span class="identifier">special_values_parser_type</span><span class="special">&amp;</span> <span class="identifier">sv_parser</span><span class="special">,</span>
                            <span class="keyword">const</span> <span class="identifier">period_parser_type</span><span class="special">&amp;</span> <span class="identifier">per_parser</span><span class="special">,</span>
                            <span class="keyword">const</span> <span class="identifier">date_gen_parser_type</span><span class="special">&amp;</span> <span class="identifier">date_gen_parser</span><span class="special">,</span>
                            <span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">ref_count</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span>


  <span class="keyword">void</span> <span class="identifier">format</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="keyword">const</span> <span class="identifier">format</span><span class="special">);</span>
  <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">set_iso_format</span><span class="special">();</span>
  <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">set_iso_extended_format</span><span class="special">();</span>
  <span class="keyword">void</span> <span class="identifier">month_format</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="keyword">const</span> <span class="identifier">format</span><span class="special">);</span>
  <span class="keyword">void</span> <span class="identifier">weekday_format</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="keyword">const</span> <span class="identifier">format</span><span class="special">);</span>
  <span class="keyword">void</span> <span class="identifier">year_format</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="keyword">const</span> <span class="identifier">format</span><span class="special">);</span>

  <span class="comment">//set the various strings associated with dates
</span>  <span class="keyword">void</span> <span class="identifier">short_weekday_names</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">input_collection_type</span><span class="special">&amp;</span> <span class="identifier">weekday_names</span><span class="special">);</span>
  <span class="keyword">void</span> <span class="identifier">long_weekday_names</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">input_collection_type</span><span class="special">&amp;</span> <span class="identifier">weekday_names</span><span class="special">);</span>
  <span class="keyword">void</span> <span class="identifier">short_month_names</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">input_collection_type</span><span class="special">&amp;</span> <span class="identifier">month_names</span><span class="special">);</span>
  <span class="keyword">void</span> <span class="identifier">long_month_names</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">input_collection_type</span><span class="special">&amp;</span> <span class="identifier">month_names</span><span class="special">);</span>

  <span class="comment">//allow user specialization of period and special value handling
</span>  <span class="keyword">void</span> <span class="identifier">period_parser</span><span class="special">(</span><span class="identifier">period_parser_type</span> <span class="identifier">period_parser</span><span class="special">);</span>
  <span class="keyword">void</span> <span class="identifier">special_values_parser</span><span class="special">(</span><span class="identifier">special_values_parser_type</span> <span class="identifier">sv_parser</span><span class="special">);</span>

  <span class="identifier">InItrT</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">from</span><span class="special">,</span> 
             <span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">to</span><span class="special">,</span> 
             <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="comment">/*a_ios*/</span><span class="special">,</span> 
             <span class="identifier">date_type</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">InItrT</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">from</span><span class="special">,</span> 
             <span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">to</span><span class="special">,</span> 
             <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="comment">/*a_ios*/</span><span class="special">,</span> 
             <span class="identifier">month_type</span><span class="special">&amp;</span> <span class="identifier">m</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">InItrT</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">from</span><span class="special">,</span> 
             <span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">to</span><span class="special">,</span> 
             <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="comment">/*a_ios*/</span><span class="special">,</span> 
             <span class="identifier">day_of_week_type</span><span class="special">&amp;</span> <span class="identifier">wd</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">InItrT</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">from</span><span class="special">,</span> 
             <span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">to</span><span class="special">,</span> 
             <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="comment">/*a_ios*/</span><span class="special">,</span> 
             <span class="identifier">day_type</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">InItrT</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">from</span><span class="special">,</span> 
             <span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">to</span><span class="special">,</span> 
             <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="comment">/*a_ios*/</span><span class="special">,</span> 
             <span class="identifier">year_type</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">InItrT</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">from</span><span class="special">,</span> 
             <span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">to</span><span class="special">,</span> 
             <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="identifier">a_ios</span><span class="special">,</span> 
             <span class="identifier">duration_type</span><span class="special">&amp;</span> <span class="identifier">dd</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
  <span class="identifier">InItrT</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">from</span><span class="special">,</span> 
             <span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">to</span><span class="special">,</span> 
             <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="identifier">a_ios</span><span class="special">,</span> 
             <span class="identifier">period_type</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
<span class="special">};</span>
</pre><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_time_output_facet"></a><h4><a name="id294789"></a>
      template class time_output_facet
    </h4><pre class="programlisting">
<span class="comment">/* Facet used for format-based output of date_time types 
 * This class provides for the use of format strings to output times.  In addition
 * to the flags for formatting date elements, the following are the allowed format flags:
 *  - %x %X =&gt; default format - enables addition of more flags to default (ie. "%x %X %z")
 *  - %f =&gt; fractional seconds ".123456"
 *  - %F =&gt; fractional seconds or none: like frac sec but empty if frac sec == 0
 *  - %s =&gt; seconds w/ fractional sec "02.123" (this is the same as "%S%f) 
 *  - %S =&gt; seconds "02"
 *  - %z =&gt; abbreviated time zone "EDT"
 *  - %Z =&gt; full time zone name "Eastern Daylight Time"
 */</span>
<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">time_type</span><span class="special">,</span>
          <span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> 
          <span class="keyword">class</span> <span class="identifier">OutItrT</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ostreambuf_iterator</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">char_traits</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">time_output_facet</span> <span class="special">:</span> 
  <span class="keyword">public</span> <span class="identifier">date_output_facet</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">::</span><span class="identifier">date_type</span> <span class="special">,</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">OutItrT</span><span class="special">&gt;</span> <span class="special">{</span>
 <span class="keyword">public</span><span class="special">:</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">::</span><span class="identifier">date_type</span> <span class="identifier">date_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">::</span><span class="identifier">time_duration_type</span> <span class="identifier">time_duration_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">basic_time_period</span><span class="special">&lt;</span><span class="identifier">time_type</span><span class="special">,</span><span class="identifier">time_duration_type</span><span class="special">&gt;</span> <span class="identifier">period_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="identifier">date_output_facet</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">::</span><span class="identifier">date_type</span><span class="special">,</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">OutItrT</span><span class="special">&gt;</span> <span class="identifier">base_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">string_type</span> <span class="identifier">string_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">char_type</span>   <span class="identifier">char_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">period_formatter_type</span> <span class="identifier">period_formatter_type</span><span class="special">;</span>
  <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">special_values_formatter_type</span> <span class="identifier">special_values_formatter_type</span><span class="special">;</span>

  <span class="keyword">explicit</span> <span class="identifier">time_facet</span><span class="special">(::</span><span class="identifier">size_t</span> <span class="identifier">a_ref</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span>
  <span class="keyword">explicit</span> <span class="identifier">time_facet</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="identifier">a_format</span><span class="special">,</span>
                      <span class="identifier">period_formatter_type</span> <span class="identifier">period_formatter</span> <span class="special">=</span> <span class="identifier">period_formatter_type</span><span class="special">(),</span> 
                      <span class="keyword">const</span> <span class="identifier">special_values_formatter_type</span><span class="special">&amp;</span> <span class="identifier">special_value_formatter</span> <span class="special">=</span> <span class="identifier">special_values_formatter_type</span><span class="special">(),</span>
                       <span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">a_ref</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span>

  <span class="comment">// Changes format for time_duration
</span>  <span class="keyword">void</span> <span class="identifier">time_duration_format</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">char_type</span><span class="special">*</span> <span class="keyword">const</span> <span class="identifier">format</span><span class="special">);</span>
  <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">set_iso_format</span><span class="special">();</span>
  <span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">set_iso_extended_format</span><span class="special">();</span>

  <span class="comment">//write out a date_time time point
</span>  <span class="identifier">OutItrT</span> <span class="identifier">put</span><span class="special">(</span><span class="identifier">OutItrT</span> <span class="identifier">a_next</span><span class="special">,</span> 
              <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="identifier">a_ios</span><span class="special">,</span> 
              <span class="identifier">char_type</span> <span class="identifier">a_fill</span><span class="special">,</span> 
              <span class="keyword">const</span> <span class="identifier">time_type</span><span class="special">&amp;</span> <span class="identifier">a_time</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>

  <span class="comment">//write out a duration
</span>  <span class="identifier">OutItrT</span> <span class="identifier">put</span><span class="special">(</span><span class="identifier">OutItrT</span> <span class="identifier">a_next</span><span class="special">,</span> 
              <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="identifier">a_ios</span><span class="special">,</span> 
              <span class="identifier">char_type</span> <span class="identifier">a_fill</span><span class="special">,</span> 
              <span class="keyword">const</span> <span class="identifier">time_duration_type</span><span class="special">&amp;</span> <span class="identifier">a_time_dur</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>

  <span class="comment">//wirte out a date_time period
</span>  <span class="identifier">OutItrT</span> <span class="identifier">put</span><span class="special">(</span><span class="identifier">OutItrT</span> <span class="identifier">next</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="identifier">a_ios</span><span class="special">,</span> 
              <span class="identifier">char_type</span> <span class="identifier">fill</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">period_type</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>


<span class="special">};</span>
</pre><p>
      To Be Specified...
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.template_class_time_input_facet"></a><h4><a name="id296013"></a>
      template class time_input_facet
    </h4><pre class="programlisting">
<span class="comment">// Facet for format-based input of date_time types
</span><span class="comment">//default date_time format is YYYY-Mon-DD HH:MM:SS[.fff...][ zzz]
</span><span class="comment">//default time_duration format is %H:%M:%S%F HH:MM:SS[.fff...]
</span><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">time_type</span><span class="special">,</span>
          <span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> 
          <span class="keyword">class</span> <span class="identifier">InItrT</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">istreambuf_iterator</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">char_traits</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span>
<span class="keyword">class</span> <span class="identifier">time_input_facet</span> <span class="special">:</span> 
  <span class="keyword">public</span> <span class="identifier">date_input_facet</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">::</span><span class="identifier">date_type</span> <span class="special">,</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">InItrT</span><span class="special">&gt;</span> <span class="special">{</span>
  <span class="keyword">public</span><span class="special">:</span>
    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">::</span><span class="identifier">date_type</span> <span class="identifier">date_type</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">::</span><span class="identifier">time_duration_type</span> <span class="identifier">time_duration_type</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">time_duration_type</span><span class="special">::</span><span class="identifier">fractional_seconds_type</span> <span class="identifier">fractional_seconds_type</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="identifier">basic_time_period</span><span class="special">&lt;</span><span class="identifier">time_type</span><span class="special">,</span><span class="identifier">time_duration_type</span><span class="special">&gt;</span> <span class="identifier">period_type</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="identifier">date_input_facet</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">time_type</span><span class="special">::</span><span class="identifier">date_type</span><span class="special">,</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">InItrT</span><span class="special">&gt;</span> <span class="identifier">base_type</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">duration_type</span> <span class="identifier">date_duration_type</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">year_type</span> <span class="identifier">year_type</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">month_type</span> <span class="identifier">month_type</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">day_type</span> <span class="identifier">day_type</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">string_type</span> <span class="identifier">string_type</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">string_type</span><span class="special">::</span><span class="identifier">const_iterator</span> <span class="identifier">const_itr</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">char_type</span>   <span class="identifier">char_type</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">format_date_parser_type</span> <span class="identifier">format_date_parser_type</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">period_parser_type</span> <span class="identifier">period_parser_type</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">special_values_parser_type</span> <span class="identifier">special_values_parser_type</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">date_gen_parser_type</span> <span class="identifier">date_gen_parser_type</span><span class="special">;</span>
    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">base_type</span><span class="special">::</span><span class="identifier">special_values_parser_type</span><span class="special">::</span><span class="identifier">match_results</span> <span class="identifier">match_results</span><span class="special">;</span>

    <span class="keyword">explicit</span> <span class="identifier">time_input_facet</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">string_type</span><span class="special">&amp;</span> <span class="identifier">format</span><span class="special">,</span> <span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">a_ref</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span>

    <span class="keyword">explicit</span> <span class="identifier">time_input_facet</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">string_type</span><span class="special">&amp;</span> <span class="identifier">format</span><span class="special">,</span>
                              <span class="keyword">const</span> <span class="identifier">format_date_parser_type</span><span class="special">&amp;</span> <span class="identifier">date_parser</span><span class="special">,</span>
                              <span class="keyword">const</span> <span class="identifier">special_values_parser_type</span><span class="special">&amp;</span> <span class="identifier">sv_parser</span><span class="special">,</span>
                              <span class="keyword">const</span> <span class="identifier">period_parser_type</span><span class="special">&amp;</span> <span class="identifier">per_parser</span><span class="special">,</span>
                              <span class="keyword">const</span> <span class="identifier">date_gen_parser_type</span><span class="special">&amp;</span> <span class="identifier">date_gen_parser</span><span class="special">,</span>
                              <span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">a_ref</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span>

    <span class="identifier">InItrT</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">sitr</span><span class="special">,</span> 
               <span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">stream_end</span><span class="special">,</span> 
               <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="identifier">a_ios</span><span class="special">,</span> 
               <span class="identifier">time_duration_type</span><span class="special">&amp;</span> <span class="identifier">td</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>

    <span class="identifier">InItrT</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">sitr</span><span class="special">,</span> 
               <span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">stream_end</span><span class="special">,</span> 
               <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="identifier">a_ios</span><span class="special">,</span> 
               <span class="identifier">time_type</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>

    <span class="identifier">InItrT</span> <span class="identifier">get_local_time</span><span class="special">(</span><span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">sitr</span><span class="special">,</span> 
                          <span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">stream_end</span><span class="special">,</span> 
                          <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="identifier">a_ios</span><span class="special">,</span> 
                          <span class="identifier">time_type</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">,</span>
                          <span class="identifier">string_type</span><span class="special">&amp;</span> <span class="identifier">tz_str</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>

    <span class="identifier">InItrT</span> <span class="identifier">get</span><span class="special">(</span><span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">sitr</span><span class="special">,</span> 
               <span class="identifier">InItrT</span><span class="special">&amp;</span> <span class="identifier">stream_end</span><span class="special">,</span> 
               <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">&amp;</span> <span class="identifier">a_ios</span><span class="special">,</span> 
               <span class="identifier">time_type</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">,</span>
               <span class="identifier">string_type</span><span class="special">&amp;</span> <span class="identifier">tz_str</span><span class="special">,</span>
               <span class="keyword">bool</span> <span class="identifier">time_is_local</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>

<span class="special">};</span>
</pre><p>
      To Be Specified...
    </p><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.proposed_text.output_operators_for_temporal_types"></a><h4><a name="id297719"></a>
      Output Operators for Temporal Types
    </h4><p>
      The following functions specify input and output operators for all temporal
      types.
    </p><pre class="programlisting">
<span class="comment">//dates
</span><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">TraitsT</span><span class="special">&gt;</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span>
<span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">basic_date</span><span class="special">&amp;);</span>

<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">&gt;</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span>
<span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span> <span class="identifier">is</span><span class="special">,</span> <span class="identifier">basic_date</span><span class="special">&amp;);</span>

<span class="comment">//date_time
</span><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">TraitsT</span><span class="special">&gt;</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span>
<span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">basic_date_time</span><span class="special">&amp;);</span>

<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">&gt;</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span>
<span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span> <span class="identifier">is</span><span class="special">,</span> <span class="identifier">basic_date_time</span><span class="special">&amp;);</span>
     <span class="comment">//date durations
</span><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">TraitsT</span><span class="special">&gt;</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span>
<span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="identifier">basic_duration</span><span class="special">&amp;);</span>

<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">&gt;</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span>
<span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span> <span class="identifier">is</span><span class="special">,</span>  <span class="identifier">basic_duration</span><span class="special">&amp;);</span>

<span class="comment">//time_periods
</span><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">TraitsT</span><span class="special">&gt;</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span>
<span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">basic_time_period</span><span class="special">&amp;);</span>

<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">&gt;</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span>
<span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span> <span class="identifier">is</span><span class="special">,</span> <span class="identifier">basic_time_period</span><span class="special">&amp;);</span>

<span class="comment">//posix time zone
</span><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">TraitsT</span><span class="special">&gt;</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span>
<span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">TraitsT</span><span class="special">&gt;&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="identifier">posix_time_zone</span><span class="special">&amp;);</span>
  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">CharT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">&gt;</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span>
<span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_istream</span><span class="special">&lt;</span><span class="identifier">CharT</span><span class="special">,</span> <span class="identifier">Traits</span><span class="special">&gt;&amp;</span> <span class="identifier">is</span><span class="special">,</span>  <span class="identifier">posix_time_zone</span><span class="special">&amp;);</span>
</pre></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.acknowledgments"></a>Acknowledgments</h2></div></div></div><p>
      First thanks goes to the Boost Community for all the constructive suggestions
      for evolving <a href="http://www.boost.org/libs/date_time/index.html" target="_top">Boost
      Date-Time Library</a> into a great C++ date-time library. Special thanks
      goes to my family for allowing me to work on this.
    </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="n2058_06_0128_proposed_text_for_proposal_to_add_date_time_to_the_standard_library.references"></a>References</h2></div></div></div><div class="itemizedlist"><ul type="disc"><li><a href="http://www.boost.org/libs/date_time/index.html" target="_top">Boost Date-Time
        Library</a></li><li><a href="http://www.ntp.org" target="_top">Network Time Protocol</a></li><li><a href="http://www.w3.org/Protocols/rfc822#z28" target="_top">RFC 822 Date-Time Specification</a></li><li><a href="http://mirrors.isc.org/pub/www.watersprings.org/pub/id/draft-ietf-dhc-timezone-03.txt" target="_top">IETF
        Timezone Draft</a></li><li><a href="http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=40874" target="_top">ISO
        8601:2004 Data elements and interchange formats -- Information interchange
        -- Representation of dates and times</a></li><li><a href="http://www.join.uni-muenster.de/Dokumente/drafts/draft-ietf-dhc-v6exts-08.txt" target="_top">Another
        IETF DHCP Extension Draft</a></li><li><a href="http://mirrors.isc.org/pub/www.watersprings.org/pub/id/draft-ietf-dhc-timezone-03.txt" target="_top">IETF
        Timezone Draft</a></li><li><a href="http://www.langer.camelot.de/Articles/Cuj/Internationalization/I18N.html" target="_top">Langer
        on C++ internationalization</a></li><li><a href="http://tycho.usno.navy.mil/leapsec.html" target="_top">Leap Second Discussion
        at US Navy Website.</a>.
      </li></ul></div></div></div></body></html>
