[html5] r2383 - [aco] (2) Define 'month' syntax, and tighten up the rest of the datetime definitions.

whatwg at whatwg.org whatwg at whatwg.org
Wed Oct 29 18:39:25 PDT 2008


Author: ianh
Date: 2008-10-29 18:39:25 -0700 (Wed, 29 Oct 2008)
New Revision: 2383

Modified:
   index
   source
Log:
[aco] (2) Define 'month' syntax, and tighten up the rest of the datetime definitions.

Modified: index
===================================================================
--- index	2008-10-30 00:58:12 UTC (rev 2382)
+++ index	2008-10-30 01:39:25 UTC (rev 2383)
@@ -225,11 +225,11 @@
        <li><a href=#lists-of-integers><span class=secno>2.4.3.6 </span>Lists of integers</a></ol></li>
      <li><a href=#dates-and-times><span class=secno>2.4.4 </span>Dates and times</a>
       <ol>
-       <li><a href=#dates><span class=secno>2.4.4.1 </span>Dates</a></li>
-       <li><a href=#times><span class=secno>2.4.4.2 </span>Times</a></li>
-       <li><a href=#local-dates-and-times><span class=secno>2.4.4.3 </span>Local dates and times</a></li>
-       <li><a href=#global-dates-and-times><span class=secno>2.4.4.4 </span>Global dates and times</a></li>
-       <li><a href=#months><span class=secno>2.4.4.5 </span>Months</a></li>
+       <li><a href=#months><span class=secno>2.4.4.1 </span>Months</a></li>
+       <li><a href=#dates><span class=secno>2.4.4.2 </span>Dates</a></li>
+       <li><a href=#times><span class=secno>2.4.4.3 </span>Times</a></li>
+       <li><a href=#local-dates-and-times><span class=secno>2.4.4.4 </span>Local dates and times</a></li>
+       <li><a href=#global-dates-and-times><span class=secno>2.4.4.5 </span>Global dates and times</a></li>
        <li><a href=#weeks><span class=secno>2.4.4.6 </span>Weeks</a></li>
        <li><a href=#vaguer-moments-in-time><span class=secno>2.4.4.7 </span>Vaguer moments in time</a></li>
        <li><a href=#time-offsets><span class=secno>2.4.4.8 </span>Time offsets</a></ol></li>
@@ -2690,58 +2690,45 @@
   numbers in base ten.</p>
 
 
-  <h5 id=dates><span class=secno>2.4.4.1 </span>Dates</h5>
+  <h5 id=months><span class=secno>2.4.4.1 </span>Months</h5>
 
-  <p>A <dfn id=concept-date title=concept-date>date</dfn> consists of a specific
-  Gregorian date with no timezone information, consisting of a year, a
-  month, and a day. <a href=#refsGREGORIAN>[GREGORIAN]</a></p>
+  <p>A <dfn id=concept-month title=concept-month>month</dfn> consists of a specific
+  Gregorian date with no timezone information and no date information
+  beyond a year and a month. <a href=#refsGREGORIAN>[GREGORIAN]</a></p>
 
-  <p>A string is a <dfn id=valid-date-string>valid date string</dfn> if it has the
-  components in the following list, in the given order, and if the
-  components in the list follow the constraints given after the
-  list:</p>
+  <p>A string is a <dfn id=valid-month-string>valid month string</dfn> representing a year
+  <var title="">year</var> and month <var title="">month</var> if it
+  consists of the following components in the given order:</p>
 
-  <ol><li>Four or more <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a> (representing the year)</li>
+  <ol><li>Four or more <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a>, representing <var title="">year</var></li>
 
-   <li>A U+002D HYPHEN-MINUS character (-).</li>
+   <li>A U+002D HYPHEN-MINUS character (-)</li>
 
-   <li>Two <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a> (representing the month)</li>
+   <li>Two <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a>,
+   representing the month <var title="">month</var>, in the range
+   0 ≤ <var title="">month</var> ≤ 12</li>
 
-   <li>A U+002D HYPHEN-MINUS character (-).</li>
+  </ol><p>The rules to <dfn id=parse-a-month-string>parse a month string</dfn> are as follows. This
+  will either return a year and month, or nothing. If at any point the
+  algorithm says that it "fails", this means that it is aborted at
+  that point and returns nothing.</p>
 
-   <li>Two <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a> (representing the day)</li>
-
-  </ol><p>The aforementioned constraints are:</p>
-
-  <ul><li>The month <var title="">m</var> must be in the range
-   0 ≤ <var title="">m</var> ≤ 12.</li>
-
-   <li>The day <var title="">d</var> must be in the range
-   0 ≤ <var title="">d</var> ≤ <var title="">D</var> where <var title="">D</var> is the <a href=#number-of-days-in-month-month-of-year-year title="number of days in month month of year year">number of days
-   in the given month and year</a>.</li>
-
-  </ul><p>The rules to <dfn id=parse-a-date-string>parse a date string</dfn> are as follows. This
-  will either return a date, or nothing. If at any point the algorithm
-  says that it "fails", this means that it is aborted at that point
-  and returns nothing.</p>
-
   <ol><li><p>Let <var title="">input</var> be the string being
    parsed.</li>
 
    <li><p>Let <var title="">position</var> be a pointer into <var title="">input</var>, initially pointing at the start of the
    string.</li>
 
-   <li><p><a href=#parse-a-date-component>Parse a date component</a> to obtain <var title="">year</var>, <var title="">month</var>, and <var title="">day</var>. If this returns nothing, then fail.</p>
+   <li><p><a href=#parse-a-month-component>Parse a month component</a> to obtain <var title="">year</var> and <var title="">month</var>. If this returns
+   nothing, then fail.</p>
 
    <li><p>If <var title="">position</var> is <em>not</em> beyond the
    end of <var title="">input</var>, then fail.</li>
 
-   <li><p>Let <var title="">date</var> be the date with year <var title="">year</var>, month <var title="">month</var>, and day <var title="">day</var>.</li>
+   <li><p>Return <var title="">year</var> and <var title="">month</var>.</li>
 
-   <li><p>Return <var title="">date</var>.</li>
-
-  </ol><p>The rules to <dfn id=parse-a-date-component>parse a date component</dfn>, given an <var title="">input</var> string and a <var title="">position</var>, are
-  as follows. This will either return a year, a month, and a day, or
+  </ol><p>The rules to <dfn id=parse-a-month-component>parse a month component</dfn>, given an <var title="">input</var> string and a <var title="">position</var>, are
+  as follows. This will either return a year and a month, or
   nothing. If at any point the algorithm says that it "fails", this
   means that it is aborted at that point and returns nothing.</p>
 
@@ -2765,6 +2752,56 @@
    1 ≤ <var title="">month</var> ≤ 12, then
    fail.</li>
 
+   <li><p>Return <var title="">year</var> and <var title="">month</var>.</li>
+
+  </ol><h5 id=dates><span class=secno>2.4.4.2 </span>Dates</h5>
+
+  <p>A <dfn id=concept-date title=concept-date>date</dfn> consists of a specific
+  Gregorian date with no timezone information, consisting of a year, a
+  month, and a day. <a href=#refsGREGORIAN>[GREGORIAN]</a></p>
+
+  <p>A string is a <dfn id=valid-date-string>valid date string</dfn> representing a year
+  <var title="">year</var>, month <var title="">month</var>, and day
+  <var title="">day</var> if it consists of the following components
+  in the given order:</p>
+
+  <ol><li>A <a href=#valid-month-string>valid month string</a>, representing <var title="">year</var> and <var title="">month</var></li>
+
+   <li>A U+002D HYPHEN-MINUS character (-)</li>
+
+   <li>Two <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a>,
+   representing <var title="">day</var>, in the range
+   0 ≤ <var title="">day</var> ≤ <var title="">maxday</var> where <var title="">maxday</var> is the <a href=#number-of-days-in-month-month-of-year-year title="number of days in month month of year year">number of days
+   in the month <var title="">month</var> and year <var title="">year</var></a></li>
+
+  </ol><p>The rules to <dfn id=parse-a-date-string>parse a date string</dfn> are as follows. This
+  will either return a date, or nothing. If at any point the algorithm
+  says that it "fails", this means that it is aborted at that point
+  and returns nothing.</p>
+
+  <ol><li><p>Let <var title="">input</var> be the string being
+   parsed.</li>
+
+   <li><p>Let <var title="">position</var> be a pointer into <var title="">input</var>, initially pointing at the start of the
+   string.</li>
+
+   <li><p><a href=#parse-a-date-component>Parse a date component</a> to obtain <var title="">year</var>, <var title="">month</var>, and <var title="">day</var>. If this returns nothing, then fail.</p>
+
+   <li><p>If <var title="">position</var> is <em>not</em> beyond the
+   end of <var title="">input</var>, then fail.</li>
+
+   <li><p>Let <var title="">date</var> be the date with year <var title="">year</var>, month <var title="">month</var>, and day <var title="">day</var>.</li>
+
+   <li><p>Return <var title="">date</var>.</li>
+
+  </ol><p>The rules to <dfn id=parse-a-date-component>parse a date component</dfn>, given an <var title="">input</var> string and a <var title="">position</var>, are
+  as follows. This will either return a year, a month, and a day, or
+  nothing. If at any point the algorithm says that it "fails", this
+  means that it is aborted at that point and returns nothing.</p>
+
+  <ol><li><p><a href=#parse-a-month-component>Parse a month component</a> to obtain <var title="">year</var> and <var title="">month</var>. If this returns
+   nothing, then fail.</li>
+
    <li><p>Let <var title="">maxday</var> be the <a href=#number-of-days-in-month-month-of-year-year>number of days
    in month <var title="">month</var> of year <var title="">year</var></a>.</li>
 
@@ -2784,54 +2821,51 @@
    <li><p>Return <var title="">year</var>, <var title="">month</var>,
    and <var title="">day</var>.</li>
 
-  </ol><h5 id=times><span class=secno>2.4.4.2 </span>Times</h5>
+  </ol><h5 id=times><span class=secno>2.4.4.3 </span>Times</h5>
 
   <p>A <dfn id=concept-time title=concept-time>time</dfn> consists of a specific
   time with no timezone information, consisting of an hour, a minute,
   a second, and a fraction of a second.</p>
 
-  <p>A string is a <dfn id=valid-time-string>valid time string</dfn> if it has the
-  components in the following list, in the given order, and if the
-  components in the list follow the constraints given after the
-  list:</p>
+  <p>A string is a <dfn id=valid-time-string>valid time string</dfn> representing an hour
+  <var title="">hour</var>, a minute <var title="">minute</var>, and a
+  second <var title="">second</var> if it consists of the following
+  components in the given order:</p>
 
-  <ol><li>Two <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a> (representing the hour)</li>
+  <ol><li>Two <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a>,
+   representing <var title="">hour</var>, in the range
+   0 ≤ <var title="">hour</var> ≤ 23</li>
 
-   <li>A U+003A COLON character (:).</li>
+   <li>A U+003A COLON character (:)</li>
 
-   <li>Two <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a> (representing the minutes)</li>
+   <li>Two <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a>,
+   representing <var title="">minute</var></li>
 
-   <li>Optionally:
+   <li>Optionally (required if <var title="">second</var> is
+   non-zero):
 
-    <ol><li>A U+003A COLON character (:).</li>
+    <ol><li>A U+003A COLON character (:)</li>
 
-     <li>Two <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a> (representing the integer part of the seconds)</li>
+     <li>Two <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a>,
+     representing the integer part of <var title="">second</var>, in
+     the range 0 ≤ <var title="">s</var> ≤ 59</li>
 
-     <li>Optionally:
+     <li>Optionally (required if <var title="">second</var> is not an
+     integer):
 
       <ol><li>A 002E FULL STOP character (.)</li>
 
-       <li>One or more <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a> (representing the fractional part of the seconds)</li>
+       <li>One or more <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a>, representing the
+       fractional part of <var title="">second</var></li>
 
       </ol></li>
 
     </ol></li>
 
-  </ol><p>The aforementioned constraints are:</p>
+  </ol><p class=note>The <var title="">second</var> component cannot be
+  60 or 61; leap seconds cannot be represented.</p>
 
-  <ul><li>The hour <var title="">h</var> must be in the range
-   0 ≤ <var title="">h</var> ≤ 23.</li>
-
-   <li>The minute <var title="">m</var> must be in the range
-   0 ≤ <var title="">m</var> ≤ 59.</li>
-
-   <li>If present, the second <var title="">s</var> (consisting of the
-   integer part and its fractional part) must be in the range
-   0 ≤ <var title="">s</var> < 60.  (The
-   values 60 and 61 are not allowed: leap seconds cannot be
-   represented by datetime values.)</li>
-
-  </ul><p>The rules to <dfn id=parse-a-time-string>parse a time string</dfn> are as follows. This
+  <p>The rules to <dfn id=parse-a-time-string>parse a time string</dfn> are as follows. This
   will either return a time, or nothing. If at any point the algorithm
   says that it "fails", this means that it is aborted at that point
   and returns nothing.</p>
@@ -2918,7 +2952,7 @@
    <li><p>Return <var title="">hour</var>, <var title="">minute</var>,
    and <var title="">second</var>.</li>
 
-  </ol><h5 id=local-dates-and-times><span class=secno>2.4.4.3 </span>Local dates and times</h5>
+  </ol><h5 id=local-dates-and-times><span class=secno>2.4.4.4 </span>Local dates and times</h5>
 
   <p>A <dfn id=concept-datetime-local title=concept-datetime-local>local date and time</dfn>
   consists of a specific Gregorian date, consisting of a year, a
@@ -2926,14 +2960,15 @@
   second, and a fraction of a second, but expressed without a time
   zone. <a href=#refsGREGORIAN>[GREGORIAN]</a></p>
 
-  <p>A string is a <dfn id=valid-local-date-and-time-string>valid local date and time string</dfn> if it
-  has the components in the following list, in the given order:</p>
+  <p>A string is a <dfn id=valid-local-date-and-time-string>valid local date and time string</dfn>
+  representing a date and time if it consists of the following
+  components in the given order:</p>
 
-  <ol><li>A <a href=#valid-date-string>valid date string</a>.</li>
+  <ol><li>A <a href=#valid-date-string>valid date string</a> representing the date.</li>
 
    <li>A U+0054 LATIN CAPITAL LETTER T character.</li>
 
-   <li>A <a href=#valid-time-string>valid time string</a>.</li>
+   <li>A <a href=#valid-time-string>valid time string</a> representing the time.</li>
 
   </ol><p>The rules to <dfn id=parse-a-local-date-and-time-string>parse a local date and time string</dfn> are as
   follows. This will either return a date and time, or nothing. If at
@@ -2964,7 +2999,7 @@
 
    <li><p>Return <var title="">date</var> and <var title="">time</var>.</li>
 
-  </ol><h5 id=global-dates-and-times><span class=secno>2.4.4.4 </span>Global dates and times</h5>
+  </ol><h5 id=global-dates-and-times><span class=secno>2.4.4.5 </span>Global dates and times</h5>
 
   <p>A <dfn id=concept-datetime title=concept-datetime>global date and time</dfn>
   consists of a specific Gregorian date, consisting of a year, a
@@ -2977,52 +3012,48 @@
   <dd>(Non-normative) <cite>Inter Gravissimas</cite>, A. Lilius, C. Clavius. Gregory XIII Papal Bulls, February 1582.</dd>
   -->
 
-  <p>A string is a <dfn id=valid-global-date-and-time-string>valid global date and time string</dfn> if it
-  has the components in the following list, in the given order, and if
-  the components in the list follow the constraints given after the
-  list:</p>
+  <p>A string is a <dfn id=valid-global-date-and-time-string>valid global date and time string</dfn>
+  representing a date, time, and a timezone offset if it consists of
+  the following components in the given order:</p>
 
-  <ol><li>A <a href=#valid-date-string>valid date string</a>.</li>
+  <ol><li>A <a href=#valid-date-string>valid date string</a> representing the date</li>
 
-   <li>A U+0054 LATIN CAPITAL LETTER T character.</li>
+   <li>A U+0054 LATIN CAPITAL LETTER T character</li>
 
-   <li>A <a href=#valid-time-string>valid time string</a>.</li>
+   <li>A <a href=#valid-time-string>valid time string</a> representing the time</li>
 
    <li>Either:
 
-    <ul><li>A U+005A LATIN CAPITAL LETTER Z character (indicating the
-     time zone is UTC)</li>
+    <ul><li>A U+005A LATIN CAPITAL LETTER Z character, allowed only if
+     the time zone is UTC</li>
 
      <li>Or:
 
       <ol><li>Either a U+002B PLUS SIGN character (+) or a U+002D
-       HYPHEN-MINUS (-) character (the sign of the timezone
-       offset)</li>
+       HYPHEN-MINUS (-) character, representing the sign of the
+       timezone offset</li>
 
-       <li>Two <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a> (representing the hours component of the timezone offset)</li>
+       <li>Two <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a>,
+       representing the hours component <var title="">hour</var> of
+       the timezone offset, in the range 0 ≤ <var title="">hour</var> ≤ 23</li>
 
-       <li>A U+003A COLON character (:).</li>
+       <li>A U+003A COLON character (:)</li>
 
-       <li>Two <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a> (representing the minutes component of the timezone offset)</li>
+       <li>Two <a href=#concept-datetime-digit title=concept-datetime-digit>digits</a>,
+       representing the minutes component <var title="">minute</var>
+       of the timezone offset, in the range 0 ≤ <var title="">minute</var> ≤ 59</li>
 
       </ol></li>
 
     </ul></li>
 
-  </ol><p>The aforementioned constraints are:</p>
+  </ol><p class=note>This format allows for time zone offsets from -23:59
+  to +23:59. In practice, however, the range of actual time zones is
+  -12:00 to +14:00, and the minutes component of actual time zones is
+  always either 00, 30, or 45.</p>
 
-  <ul><li>If present, the time zone hour <var title="">h</var> must be in
-   the range 0 ≤ <var title="">h</var> ≤ 23. (However, in practice, time
-   zones do not currently ever have an hour component greater than
-   14.)</li>
+  <div class=example>
 
-   <li>If present, the time zone minute <var title="">m</var> must be
-   in the range 0 ≤ <var title="">m</var> ≤ 59. (However, in practice, time
-   zones do not currently ever have a minute component other than 0, 30,
-   or 45.)</li>
-
-  </ul><div class=example>
-
    <p>The following are some examples of dates written as <a href=#valid-global-date-and-time-string title="valid global date and time string">valid global date and
    time strings</a>.</p>
 
@@ -3157,19 +3188,8 @@
 
    <li><p>Return <var title="">time</var> and <var title="">timezone</var>.</li>
 
-  </ol><h5 id=months><span class=secno>2.4.4.5 </span>Months</h5>
+  </ol><h5 id=weeks><span class=secno>2.4.4.6 </span>Weeks</h5>
 
-  <p>A <dfn id=concept-month title=concept-month>month</dfn> consists of a specific
-  Gregorian date with no timezone information and no date information
-  beyond a year and a month. <a href=#refsGREGORIAN>[GREGORIAN]</a></p>
-
-  <p class=XXX>... <dfn id=valid-month-string>valid month string</dfn></p>
-
-  <p class=XXX>... rules to <dfn id=parse-a-month-string>parse a month string</dfn></p>
-
-
-  <h5 id=weeks><span class=secno>2.4.4.6 </span>Weeks</h5>
-
   <p>A <dfn id=concept-week title=concept-week>week</dfn> consists of a specific
   Gregorian date with no timezone information and no date information
   beyond a year and a week. <a href=#refsGREGORIAN>[GREGORIAN]</a></p>

Modified: source
===================================================================
--- source	2008-10-30 00:58:12 UTC (rev 2382)
+++ source	2008-10-30 01:39:25 UTC (rev 2383)
@@ -1958,45 +1958,121 @@
   numbers in base ten.</p>
 
 
-  <h5>Dates</h5>
+  <h5>Months</h5>
 
-  <p>A <dfn title="concept-date">date</dfn> consists of a specific
-  Gregorian date with no timezone information, consisting of a year, a
-  month, and a day. <a href="#refsGREGORIAN">[GREGORIAN]</a></p>
+  <p>A <dfn title="concept-month">month</dfn> consists of a specific
+  Gregorian date with no timezone information and no date information
+  beyond a year and a month. <a
+  href="#refsGREGORIAN">[GREGORIAN]</a></p>
 
-  <p>A string is a <dfn>valid date string</dfn> if it has the
-  components in the following list, in the given order, and if the
-  components in the list follow the constraints given after the
-  list:</p>
+  <p>A string is a <dfn>valid month string</dfn> representing a year
+  <var title="">year</var> and month <var title="">month</var> if it
+  consists of the following components in the given order:</p>
 
   <ol>
 
-   <li>Four or more <span title="concept-datetime-digit">digits</span> (representing the year)</li>
+   <li>Four or more <span
+   title="concept-datetime-digit">digits</span>, representing <var
+   title="">year</var></li>
 
-   <li>A U+002D HYPHEN-MINUS character (-).</li>
+   <li>A U+002D HYPHEN-MINUS character (-)</li>
 
-   <li>Two <span title="concept-datetime-digit">digits</span> (representing the month)</li>
+   <li>Two <span title="concept-datetime-digit">digits</span>,
+   representing the month <var title="">month</var>, in the range
+   0 ≤ <var
+   title="">month</var> ≤ 12</li>
 
-   <li>A U+002D HYPHEN-MINUS character (-).</li>
+  </ol>
 
-   <li>Two <span title="concept-datetime-digit">digits</span> (representing the day)</li>
+  <p>The rules to <dfn>parse a month string</dfn> are as follows. This
+  will either return a year and month, or nothing. If at any point the
+  algorithm says that it "fails", this means that it is aborted at
+  that point and returns nothing.</p>
 
+  <ol>
+
+   <li><p>Let <var title="">input</var> be the string being
+   parsed.</p></li>
+
+   <li><p>Let <var title="">position</var> be a pointer into <var
+   title="">input</var>, initially pointing at the start of the
+   string.</p></li>
+
+   <li><p><span>Parse a month component</span> to obtain <var
+   title="">year</var> and <var title="">month</var>. If this returns
+   nothing, then fail.</p>
+
+   <li><p>If <var title="">position</var> is <em>not</em> beyond the
+   end of <var title="">input</var>, then fail.</p></li>
+
+   <li><p>Return <var title="">year</var> and <var
+   title="">month</var>.</p></li>
+
   </ol>
 
-  <p>The aforementioned constraints are:</p>
+  <p>The rules to <dfn>parse a month component</dfn>, given an <var
+  title="">input</var> string and a <var title="">position</var>, are
+  as follows. This will either return a year and a month, or
+  nothing. If at any point the algorithm says that it "fails", this
+  means that it is aborted at that point and returns nothing.</p>
 
-  <ul>
+  <ol>
 
-   <li>The month <var title="">m</var> must be in the range
-   0 ≤ <var title="">m</var> ≤ 12.</li>
+   <li><p><span>Collect a sequence of characters</span> in the range
+   U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9). If the collected
+   sequence is not at least four characters long, then
+   fail. Otherwise, interpret the resulting sequence as a base-ten
+   integer. Let that number be the <var title="">year</var>.</p></li>
 
-   <li>The day <var title="">d</var> must be in the range
-   0 ≤ <var title="">d</var> ≤ <var
-   title="">D</var> where <var title="">D</var> is the <span
+   <li><p>If <var title="">position</var> is beyond the end of <var
+   title="">input</var> or if the character at <var
+   title="">position</var> is not a U+002D HYPHEN-MINUS character,
+   then fail. Otherwise, move <var title="">position</var> forwards
+   one character.</p></li>
+
+   <li><p><span>Collect a sequence of characters</span> in the range
+   U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9). If the collected
+   sequence is not exactly two characters long, then fail. Otherwise,
+   interpret the resulting sequence as a base-ten integer. Let that
+   number be the <var title="">month</var>.</p></li>
+
+   <li>If <var title="">month</var> is not a number in the range
+   1 ≤ <var title="">month</var> ≤ 12, then
+   fail.</li>
+
+   <li><p>Return <var title="">year</var> and <var
+   title="">month</var>.</p></li>
+
+  </ol>
+
+
+  <h5>Dates</h5>
+
+  <p>A <dfn title="concept-date">date</dfn> consists of a specific
+  Gregorian date with no timezone information, consisting of a year, a
+  month, and a day. <a href="#refsGREGORIAN">[GREGORIAN]</a></p>
+
+  <p>A string is a <dfn>valid date string</dfn> representing a year
+  <var title="">year</var>, month <var title="">month</var>, and day
+  <var title="">day</var> if it consists of the following components
+  in the given order:</p>
+
+  <ol>
+
+   <li>A <span>valid month string</span>, representing <var
+   title="">year</var> and <var title="">month</var></li>
+
+   <li>A U+002D HYPHEN-MINUS character (-)</li>
+
+   <li>Two <span title="concept-datetime-digit">digits</span>,
+   representing <var title="">day</var>, in the range
+   0 ≤ <var title="">day</var> ≤ <var
+   title="">maxday</var> where <var title="">maxday</var> is the <span
    title="number of days in month month of year year">number of days
-   in the given month and year</span>.</li>
+   in the month <var title="">month</var> and year <var
+   title="">year</var></span></li>
 
-  </ul>
+  </ol>
 
   <p>The rules to <dfn>parse a date string</dfn> are as follows. This
   will either return a date, or nothing. If at any point the algorithm
@@ -2035,28 +2111,10 @@
 
   <ol>
 
-   <li><p><span>Collect a sequence of characters</span> in the range
-   U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9). If the collected
-   sequence is not at least four characters long, then
-   fail. Otherwise, interpret the resulting sequence as a base-ten
-   integer. Let that number be the <var title="">year</var>.</p></li>
+   <li><p><span>Parse a month component</span> to obtain <var
+   title="">year</var> and <var title="">month</var>. If this returns
+   nothing, then fail.</li>
 
-   <li><p>If <var title="">position</var> is beyond the end of <var
-   title="">input</var> or if the character at <var
-   title="">position</var> is not a U+002D HYPHEN-MINUS character,
-   then fail. Otherwise, move <var title="">position</var> forwards
-   one character.</p></li>
-
-   <li><p><span>Collect a sequence of characters</span> in the range
-   U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9). If the collected
-   sequence is not exactly two characters long, then fail. Otherwise,
-   interpret the resulting sequence as a base-ten integer. Let that
-   number be the <var title="">month</var>.</p></li>
-
-   <li>If <var title="">month</var> is not a number in the range
-   1 ≤ <var title="">month</var> ≤ 12, then
-   fail.</li>
-
    <li><p>Let <var title="">maxday</var> be the <span>number of days
    in month <var title="">month</var> of year <var
    title="">year</var></span>.</p></li>
@@ -2083,41 +2141,50 @@
   </ol>
 
 
-
   <h5>Times</h5>
 
   <p>A <dfn title="concept-time">time</dfn> consists of a specific
   time with no timezone information, consisting of an hour, a minute,
   a second, and a fraction of a second.</p>
 
-  <p>A string is a <dfn>valid time string</dfn> if it has the
-  components in the following list, in the given order, and if the
-  components in the list follow the constraints given after the
-  list:</p>
+  <p>A string is a <dfn>valid time string</dfn> representing an hour
+  <var title="">hour</var>, a minute <var title="">minute</var>, and a
+  second <var title="">second</var> if it consists of the following
+  components in the given order:</p>
 
   <ol>
 
-   <li>Two <span title="concept-datetime-digit">digits</span> (representing the hour)</li>
+   <li>Two <span title="concept-datetime-digit">digits</span>,
+   representing <var title="">hour</var>, in the range
+   0 ≤ <var title="">hour</var> ≤ 23</li>
 
-   <li>A U+003A COLON character (:).</li>
+   <li>A U+003A COLON character (:)</li>
 
-   <li>Two <span title="concept-datetime-digit">digits</span> (representing the minutes)</li>
+   <li>Two <span title="concept-datetime-digit">digits</span>,
+   representing <var title="">minute</var></li>
 
-   <li>Optionally:
+   <li>Optionally (required if <var title="">second</var> is
+   non-zero):
 
     <ol>
 
-     <li>A U+003A COLON character (:).</li>
+     <li>A U+003A COLON character (:)</li>
 
-     <li>Two <span title="concept-datetime-digit">digits</span> (representing the integer part of the seconds)</li>
+     <li>Two <span title="concept-datetime-digit">digits</span>,
+     representing the integer part of <var title="">second</var>, in
+     the range 0 ≤ <var
+     title="">s</var> ≤ 59</li>
 
-     <li>Optionally:
+     <li>Optionally (required if <var title="">second</var> is not an
+     integer):
 
       <ol>
 
        <li>A 002E FULL STOP character (.)</li>
 
-       <li>One or more <span title="concept-datetime-digit">digits</span> (representing the fractional part of the seconds)</li>
+       <li>One or more <span
+       title="concept-datetime-digit">digits</span>, representing the
+       fractional part of <var title="">second</var></li>
 
       </ol>
 
@@ -2129,24 +2196,9 @@
 
   </ol>
 
-  <p>The aforementioned constraints are:</p>
+  <p class="note">The <var title="">second</var> component cannot be
+  60 or 61; leap seconds cannot be represented.</p>
 
-  <ul>
-
-   <li>The hour <var title="">h</var> must be in the range
-   0 ≤ <var title="">h</var> ≤ 23.</li>
-
-   <li>The minute <var title="">m</var> must be in the range
-   0 ≤ <var title="">m</var> ≤ 59.</li>
-
-   <li>If present, the second <var title="">s</var> (consisting of the
-   integer part and its fractional part) must be in the range
-   0 ≤ <var title="">s</var> < 60.  (The
-   values 60 and 61 are not allowed: leap seconds cannot be
-   represented by datetime values.)</li>
-
-  </ul>
-
   <p>The rules to <dfn>parse a time string</dfn> are as follows. This
   will either return a time, or nothing. If at any point the algorithm
   says that it "fails", this means that it is aborted at that point
@@ -2268,16 +2320,17 @@
   second, and a fraction of a second, but expressed without a time
   zone. <a href="#refsGREGORIAN">[GREGORIAN]</a></p>
 
-  <p>A string is a <dfn>valid local date and time string</dfn> if it
-  has the components in the following list, in the given order:</p>
+  <p>A string is a <dfn>valid local date and time string</dfn>
+  representing a date and time if it consists of the following
+  components in the given order:</p>
 
   <ol>
 
-   <li>A <span>valid date string</span>.</li>
+   <li>A <span>valid date string</span> representing the date.</li>
 
    <li>A U+0054 LATIN CAPITAL LETTER T character.</li>
 
-   <li>A <span>valid time string</span>.</li>
+   <li>A <span>valid time string</span> representing the time.</li>
 
   </ol>
 
@@ -2341,39 +2394,44 @@
   <dd>(Non-normative) <cite>Inter Gravissimas</cite>, A. Lilius, C. Clavius. Gregory XIII Papal Bulls, February 1582.</dd>
   -->
 
-  <p>A string is a <dfn>valid global date and time string</dfn> if it
-  has the components in the following list, in the given order, and if
-  the components in the list follow the constraints given after the
-  list:</p>
+  <p>A string is a <dfn>valid global date and time string</dfn>
+  representing a date, time, and a timezone offset if it consists of
+  the following components in the given order:</p>
 
   <ol>
 
-   <li>A <span>valid date string</span>.</li>
+   <li>A <span>valid date string</span> representing the date</li>
 
-   <li>A U+0054 LATIN CAPITAL LETTER T character.</li>
+   <li>A U+0054 LATIN CAPITAL LETTER T character</li>
 
-   <li>A <span>valid time string</span>.</li>
+   <li>A <span>valid time string</span> representing the time</li>
 
    <li>Either:
 
     <ul>
 
-     <li>A U+005A LATIN CAPITAL LETTER Z character (indicating the
-     time zone is UTC)</li>
+     <li>A U+005A LATIN CAPITAL LETTER Z character, allowed only if
+     the time zone is UTC</li>
 
      <li>Or:
 
       <ol>
 
        <li>Either a U+002B PLUS SIGN character (+) or a U+002D
-       HYPHEN-MINUS (-) character (the sign of the timezone
-       offset)</li>
+       HYPHEN-MINUS (-) character, representing the sign of the
+       timezone offset</li>
 
-       <li>Two <span title="concept-datetime-digit">digits</span> (representing the hours component of the timezone offset)</li>
+       <li>Two <span title="concept-datetime-digit">digits</span>,
+       representing the hours component <var title="">hour</var> of
+       the timezone offset, in the range 0 ≤ <var
+       title="">hour</var> ≤ 23</li>
 
-       <li>A U+003A COLON character (:).</li>
+       <li>A U+003A COLON character (:)</li>
 
-       <li>Two <span title="concept-datetime-digit">digits</span> (representing the minutes component of the timezone offset)</li>
+       <li>Two <span title="concept-datetime-digit">digits</span>,
+       representing the minutes component <var title="">minute</var>
+       of the timezone offset, in the range 0 ≤ <var
+       title="">minute</var> ≤ 59</li>
 
       </ol>
 
@@ -2385,24 +2443,11 @@
 
   </ol>
 
-  <p>The aforementioned constraints are:</p>
+  <p class="note">This format allows for time zone offsets from -23:59
+  to +23:59. In practice, however, the range of actual time zones is
+  -12:00 to +14:00, and the minutes component of actual time zones is
+  always either 00, 30, or 45.</p>
 
-  <ul>
-
-   <li>If present, the time zone hour <var title="">h</var> must be in
-   the range 0 ≤ <var
-   title="">h</var> ≤ 23. (However, in practice, time
-   zones do not currently ever have an hour component greater than
-   14.)</li>
-
-   <li>If present, the time zone minute <var title="">m</var> must be
-   in the range 0 ≤ <var
-   title="">m</var> ≤ 59. (However, in practice, time
-   zones do not currently ever have a minute component other than 0, 30,
-   or 45.)</li>
-
-  </ul>
-
   <div class="example">
 
    <p>The following are some examples of dates written as <span
@@ -2586,19 +2631,6 @@
   </ol>
 
 
-
-  <h5>Months</h5>
-
-  <p>A <dfn title="concept-month">month</dfn> consists of a specific
-  Gregorian date with no timezone information and no date information
-  beyond a year and a month. <a
-  href="#refsGREGORIAN">[GREGORIAN]</a></p>
-
-  <p class="XXX">... <dfn>valid month string</dfn></p>
-
-  <p class="XXX">... rules to <dfn>parse a month string</dfn></p>
-
-
   <h5>Weeks</h5>
 
   <p>A <dfn title="concept-week">week</dfn> consists of a specific




More information about the Commit-Watchers mailing list