diff --git a/types.lisp b/types.lisp
index 26f89fa..1d481c6 100644
--- a/types.lisp
+++ b/types.lisp
@@ -1049,11 +1049,11 @@
 	 (num (str)
 	   (and str (parse-number:parse-number str))))
     (setf (values y m d h min s tz-h tz-m)
-	  (values (* (int y) (if minusp -1 1))
+	  (values (and y (* (int y) (if minusp -1 1)))
 		  (int m) (int d) (int h) (int min)
 		  (num s)
 		  (int tz-h) (int tz-m))))
-  (let ((day-limit (day-limit m y)))
+  (let ((day-limit (and m y (day-limit m y))))
     ;; check ranges
     (cond
       ((and y m d h min s
