Monday, November 08, 2010 at 12:02 AM.
system.verbs.builtins.date.iso8601StringToDate
on iso8601StringToDate (s) { <<Changes <<2/12/03; 6:22:38 PM by JES <<Created. Given the date as an ISO 8601 formatted string, return it as a Frontier date-type. <<Example: 1994-11-05T08:15:30-05:00 <<Spec: http://www.w3.org/TR/NOTE-datetime <<Cribbed from code written by Andre Radke at soap.decode.simpleType. local (multiplier = 1); if s beginsWith "-" { s = string.delete (s, 1, 1); multiplier = -1}; local (datestring = string.nthField (s, "T", 1)); s = string.delete (s, 1, string.length (datestring) + 1); local (ixplus, ixminus, tzstring, timestring); ixplus = string.patternMatch ("+", s); ixminus = string.patternMatch ("-", s); if (ixminus > 0) and (ixplus > 0) { scripterror ("Can't decode \"" + soap.xmlutils.getElementName (adrelement) + "\" element because the format of the timeInstant was invalid.")}; if (ixminus > 0) or (ixplus > 0) { local (ix = ixminus + ixplus); timestring = string.mid (s, 1, ix - 1); tzstring = string.delete (s, 1, ix)} else { timestring = s}; local (year = multiplier * number (string.nthField (datestring, "-", 1))); local (month = number (string.nthField (datestring, "-", 2))); local (day = number (string.nthField (datestring, "-", 3))); local (hour = number (string.nthField (timestring, ":", 1))); local (minute = number (string.nthField (timestring, ":", 2))); local (second = number (string.mid (string.nthField (timestring, ":", 3), 1, 2))); local (tzoffset = 60 * (60 * number (string.nthField (tzstring, ":", 1)) + number (string.nthField (tzstring, ":", 2)))); if ixminus { tzoffset = -1 * tzoffset}; return (date.set (day, month, year, hour, minute, second) - tzoffset + date.getCurrentTimeZone ())} <<bundle //test code <<date.iso8601StringToDate ("2003-02-12T18:25:38-08:00") <<"2/12/03; 6:25:38 PM"
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.