Parse a string containing an RFC3339-like like timestamp. The function new-instant is called with the following arguments. min max default --- ------------ ------- years 0 9999 N/A (s must provide years) months 1 12 1 days 1 31 1 (actual max days depends hours 0 23 0 on month and year) minutes 0 59 0 seconds 0 60 0 (though 60 is only valid nanoseconds 0 999999999 0 when minutes is 59) offset-sign -1 1 0 offset-hours 0 23 0 offset-minutes 0 59 0 These are all integers and will be non-nil. (The listed defaults will be passed if the corresponding field is not present in s.) Grammar (of s): date-fullyear = 4DIGIT date-month = 2DIGIT ; 01-12 date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on ; month/year time-hour = 2DIGIT ; 00-23 time-minute = 2DIGIT ; 00-59 time-second = 2DIGIT ; 00-58, 00-59, 00-60 based on leap second ; rules time-secfrac = '.' 1*DIGIT time-numoffset = ('+' / '-') time-hour ':' time-minute time-offset = 'Z' / time-numoffset time-part = time-hour [ ':' time-minute [ ':' time-second [time-secfrac] [time-offset] ] ] timestamp = date-year [ '-' date-month [ '-' date-mday [ 'T' time-part ] ] ] Unlike RFC3339: - we only parse the timestamp format - timestamp can elide trailing components - time-offset is optional (defaults to +00:00) Though time-offset is syntactically optional, a missing time-offset will be treated as if the time-offset zero (+00:00) had been specified.