Fix implementation of ISO 8601 date/time:
authorChris Hanson <org/chris-hanson/cph>
Wed, 24 Sep 2008 08:50:48 +0000 (08:50 +0000)
committerChris Hanson <org/chris-hanson/cph>
Wed, 24 Sep 2008 08:50:48 +0000 (08:50 +0000)
commita1cf10066d2fc2b903d06738e483a2450f762611
tree8d82f7c1aa9bd36ce1e9c867feffe836ce551a3a
parent78de984c4ae4615b583b91675ca8c996cfa8dbe1
Fix implementation of ISO 8601 date/time:

* When writing time zone, use "Z" for UTC, drop minutes when they are
  zero, and otherwise insert ":" between hours and minutes.  Omitting
  the ":", as was previously done, is not compliant.

* When parsing, there are two formats: basic and extended.  With basic
  format, there are no "-" or ":" separators allowed, and with
  extended format, they are all required.  Previously the parser
  allowed each of the date, time, and zone to independently be in
  either format.  Now the parser requires all three to be in the same
  format.

* The parser now handles fractional seconds correctly, rounding up if
  the fraction is >= 1/2.  It is also careful to use exact arithmetic
  for fractions.

* The parser now additionally accepts "," as a fraction indicator, as
  required by the standard.

* The parser now implements fractional hours and fractional minutes.

* The parser now accepts time zones over the full range of +/-24
  hours; previously it was restricted to +/-12 hours (except the
  minute could be non-zero at +12 or -12, which made no sense).

* The parser now computes time zones with non-zero minutes correctly:

old formula: (+ (* SIGN HOUR) (/ MINUTE 60))
new formula: (* SIGN (+ HOUR (/ MINUTE 60)))

* The parser has two kluges to accomodate incorrectly-formed strings
  that were once generated by this code: (1) the space character can
  be used in place of "T" as a date/time separator; and (2) the ":"
  may be omitted from the time zone in extended format.
v7/src/runtime/datime.scm