anchor.diff:    ;; 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))))
  +           (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)))
  +          (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))))))))
  +        ((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))
  
positive.code: 
  ;;(defun midnight (&key day month year zone)
  ;;  (make-time :second 0 :minute 0 :hour 0 :day day :month month :year year :zone zone))
    
  
  (defun merge-time (utc &key second minute hour day month year zone)
    (multiple-value-bind (utc-second
  			utc-minute
  			utc-hour
  			utc-day
  			utc-month
  			utc-year
  			utc-day-of-week
  			utc-daylight-savings-p
  			utc-zone)
        (decode-universal-time utc)
      (declare (ignore utc-day-of-week))
      (encode-universal-time
  
negative.code: produce an unambiguous date/time string.)"
    (multiple-value-bind (second minute hour day month year day-of-week daylight-savings-p zone)
        (etypecase time-zone
          (number  (decode-universal-time time-value (- time-zone)))
          (keyword (decode-universal-time time-value (lisp-time-zone time-zone)))
          (null    (decode-universal-time time-value)))
      (declare (ignore day-of-week))
      (when daylight-savings-p (decf zone))
      (setf zone (- zone))
      (with-output-to-string (s)
        (unless omit-date
          (format s "~4,'0d-~2,'0d-~2,'0d"  year month day))
        (unless (or omit-date omit-time)
          (write-char #\T s))
        (unless omit-time
          (format s "~2,'0d:~2,'0d:~2,'0d" hour minute second)
          (unless omit-time-zone
            (if (zerop zone)
                (princ #\Z s)
                (multiple-value-bind (h m) (truncate (* 60 zone) 60)
                  (format s  "~2,'0@d:~2,'0d" h (abs m)))))))))
  
  (defpackage :iso (:use) (:export :|8601|))
  
  (defun iso:8601 (out arg colon-p at-sign-p &rest params)
    (write-string (format-iso-8601-time
                   arg
                   :time-zone (first params)
                   :omit-time (and at-sign-p (not colon-p))
  