X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=sql%2Ftime.lisp;h=0bb18c340b45aad6aaaec43ab4cc3172739b397c;hb=925a29060928f773d4bc7d8e6bdd13c97e0ef65a;hp=51cbcbef7cbb214049624c7fa29fdbfadc2ba6f6;hpb=4c88467c8be43c3e7e72ea362390620c669de117;p=clsql.git diff --git a/sql/time.lisp b/sql/time.lisp index 51cbcbe..0bb18c3 100644 --- a/sql/time.lisp +++ b/sql/time.lisp @@ -447,8 +447,8 @@ (princ month stream) (princ #\- stream) (when (< day 10) (princ #\0 stream)) - (princ month stream) - (princ #\space stream) + (princ day stream) + (princ #\T stream) ;strict ISO says T here isn't optional. (when (< hour 10) (princ #\0 stream)) (princ hour stream) (princ #\: stream) @@ -1189,17 +1189,28 @@ rules" timestring starts with P, read a duration; otherwise read an ISO 8601 formatted date string." (declare (ignore junk-allowed)) - (let ((string (subseq timestring start end))) - (if (char= (aref string 0) #\P) - (parse-iso-8601-duration string) - (parse-iso-8601-time string)))) + (etypecase timestring + (wall-time timestring) + (date (date->time timestring)) + (string + (let ((string (subseq timestring start end))) + (if (char= (aref string 0) #\P) + (parse-iso-8601-duration string) + (parse-iso-8601-time string)))))) (defun parse-datestring (datestring &key (start 0) end junk-allowed) "parse a ISO 8601 timestring and return the corresponding date. Will throw a hissy fit if the date string is a duration. Will ignore any precision beyond day (hour/min/sec/usec)." - (let ((parsed-value (parse-timestring datestring :start start :end end :junk-allowed junk-allowed))) - (ecase (type-of parsed-value) - (wall-time (%make-date :mjd (time-mjd parsed-value)))))) + (etypecase datestring + (date datestring) + (wall-time (time->date datestring)) + (string + (let ((parsed-value + (parse-timestring + datestring :start start :end end :junk-allowed junk-allowed))) + (etypecase parsed-value + (date parsed-value) + (wall-time (time->date parsed-value))))))) (defvar *iso-8601-duration-delimiters*