At the moment there's no way of reliably parsing years from human input using 
string->date in SRFI 19. The programmer can use one of two wild cards, ~Y or 
~y, to parse 4- or 2-digit years respectively:

    (date->string (string->date "2010-03-02" "~Y-~m-~d") "~Y-~m-~d") ; ==> 
"2010-03-02" - correct
    (date->string (string->date "10-03-02" "~y-~m-~d") "~Y-~m-~d")   ; ==> 
"2010-03-02" - correct

However, if the user mistakenly enters the date in the opposite format, we get 
badness:

    (date->string (string->date "2010-03-02" "~y-~m-~d") "~Y-~m-~d") ; ==> 
error (bad format)
    (date->string (string->date "10-03-02" "~Y-~m-~d") "~Y-~m-~d")   ; ==> 
"0010-03-02" - "incorrect" century

This isn't really a bug in SRFI 19, but it is annoying in that it's impossible 
to read date information in either format in a single call to string->date.

I discussed this with Marco Maggi in his capacity as a SRFI 19 maintainer. His 
opinion was that, while any direct change to the SRFI should spawn another 
SRFI, SRFI 19 states that allows implementations to add their own wildcards to 
the standard set.

What are peoples' opinions on adding a PLT-specific wildcard to parse two or 
four digit years? I'm more than happy to do the leg work if people think it's a 
good idea. Otherwise I'll add something to Unlib to do the ~y case followed by 
the ~Y case.

Cheers,

-- Dave

_________________________________________________
  For list-related administrative tasks:
  http://list.cs.brown.edu/mailman/listinfo/plt-dev

Reply via email to