anchor.diff:    (multiple-value-bind (minutes seconds) (floor seconds 60)
       (multiple-value-bind (hours minutes) (floor minutes 60)
         (multiple-value-bind (days hours) (floor hours 24)
  -	(multiple-value-bind (weeks days) (floor days 7)
  -	  (multiple-value-bind (years weeks) (floor weeks 52)
  -	    (multiple-value-bind (centuries years) (floor years 100)
  -	      (format nil "~[~:;~:*~d centur~:@p ~]~[~:;~:*~d year~:p ~]~[~:;~:*~d week~:p ~]~[~:;~:*~d day~:p ~]~[~:;~:*~d hour~:p ~]~[~:;~:*~d minute~:p ~]~[~:;~:*~d second~:p ~]"
  -		      centuries years weeks days hours minutes seconds))))))))
  +        (multiple-value-bind (weeks days) (floor days 7)
  +          (multiple-value-bind (years weeks) (floor weeks 52)
  +            (multiple-value-bind (centuries years) (floor years 100)
  +              (format nil "~[~:;~:*~d centur~:@p ~]~[~:;~:*~d year~:p ~]~[~:;~:*~d week~:p ~]~[~:;~:*~d day~:p ~]~[~:;~:*~d hour~:p ~]~[~:;~:*~d minute~:p ~]~[~:;~:*~d second~:p ~]"
  +                      centuries years weeks days hours minutes seconds))))))))
   
   (defun parse-date-string (string)
  -  (apply #'date/time->utc 
  -	 (loop for start = 0 then (1+ dash)
  -	    for dash = (position #\- string :start start)
  -	    collect (parse-integer (subseq string start dash))
  -	    while dash)))
  +  (apply #'date/time->utc
  +         (loop for start = 0 then (1+ dash)
  +            for dash = (position #\- string :start start)
  +            collect (parse-integer (subseq string start dash))
  +            while dash)))
   
   (defun weekday-p (time)
     (with-time (day) time (< day 5)))
  
positive.code:   ;; For now parse a full time like "2009-08-05T04:28:30Z" or
    ;; "2009-08-05T05:17:40-7:00"
    (flet ((int (start &optional end)
  	   (parse-integer (subseq text start end))))
      (let ((year (int 0 4))
  	  (month (int 5 7))
  	  (day (int 8 10))
  	  (hour (int 11 13))
  	  (minute (int 14 16))
  	  (second (int 17 19))
  	  (timezone (subseq text 19)))
        (cond
  	((string= timezone "Z")
  	 (setf timezone 0))
  	(t
  	 (let ((colon (position #\: timezone)))
  	   (let ((tz-sign (if (string= (subseq timezone 0 1) "-") 1 -1))
  		 (tz-hours (parse-integer (subseq timezone 1 colon)))
  		 (tz-minutes (parse-integer (subseq timezone (1+ colon)))))
  	     (setf timezone (* tz-sign (+ tz-hours (/ tz-minutes 60))))))))
        (encode-universal-time second minute hour day month year timezone))))
  
    
  
  (defun iso-8601-time-zone (name)
    (find name *time-zones* :key #'first))
  
negative.code:   (let* ((zone-cons (member '&zone args))
           (zone (if zone-cons (cadr zone-cons)))
           (args (nconc (ldiff args zone-cons) (cddr zone-cons)))
           (gensymed-vars ()))
      (when (find zone *time-zones* :key #'first)
        (setf zone (- (second (find zone *time-zones* :key #'first)))))
      (labels ((part-name (spec)
                 (if (symbolp spec) spec (first spec)))
               (var-name (spec)
                 (if (symbolp spec) spec (second spec)))
               (make-gensym () (first (push (gensym) gensymed-vars)))
               (find-var (name)
                 (let ((name (find name args :key #'part-name :test #'string=)))
                   (if name (var-name name) (make-gensym)))))
        (let ((vars (mapcar #'find-var '(second minute hour date month year day daylight-p zone))))
          `(multiple-value-bind ,vars ,(if zone
                                        `(decode-universal-time ,utc ,zone)
                                        `(decode-universal-time ,utc))
             (declare (ignore ,@gensymed-vars))
             ,@body)))))
  
  