anchor.diff:                      (floor ,dividend ,divisor)
                     (setf ,place remainder)
                     quotient)))
  -    (let* (remaining-secs
  +    (let* (remaining-days
  +           remaining-secs
              remaining-nsecs
              (whole-units
               (ecase unit
  +              (:week (+ (divide-storing-remainder (day-of duration) local-time:+days-per-week+ remaining-days)
  +                        (divide-storing-remainder (sec-of duration) local-time:+seconds-per-day+ remaining-secs)
  +                        (divide-storing-remainder (nsec-of duration) +nsecs-per-day+ remaining-nsecs)))
                 (:day (+ (day-of duration)
                          (divide-storing-remainder (sec-of duration) local-time:+seconds-per-day+ remaining-secs)
                          (divide-storing-remainder (nsec-of duration) +nsecs-per-day+ remaining-nsecs)))
  
positive.code:           (multiple-value-bind (secs remaining)
                (duration-as remaining :sec)
              (flet ((zero-is-nil (x) (if (zerop x) nil x)))
                (format stream "[~d/~d/~d]~@[ ~d day~:p~]~@[ ~d hour~:p~]~@[ ~d minute~:p~]~@[ ~d second~:p~]~@[ ~d nsec~:p~]"
                        (day-of object)
                        (sec-of object)
                        (nsec-of object)
                        (zero-is-nil days)
                        (zero-is-nil hours)
                        (zero-is-nil minutes)
                        (zero-is-nil secs)
                        (zero-is-nil (nsec-of remaining))))))))))
  
  (defun duration (&key (day 0) (hour 0) (minute 0) (sec 0) (nsec 0))
    "Returns a new duration instance representing the sum of the `DAY`, `HOUR`, `MINUTE`, `SEC`, and `NSEC` arguments. Durations are normalized, that is, (duration :hour 1) and (duration :minute 60) will result in duration instances with the same internal representation."
    (let ((total-nsecs (+ nsec
                          (* +nsecs-per-second+ sec)
                          (* +nsecs-per-minute+ minute)
                          (* +nsecs-per-hour+ hour)
                          (* +nsecs-per-day+ day))))
      (multiple-value-bind (normalized-days remaining-nsecs)
          (floor total-nsecs +nsecs-per-day+)
        (multiple-value-bind (normalized-seconds remaining-nsecs)
  
negative.code:               (:nsec (+ (* (day-of duration) +nsecs-per-day+)
                          (* (sec-of duration) +nsecs-per-second+)
                          (nsec-of duration))))))
        (values whole-units (duration :day (or remaining-days 0) :sec (or remaining-secs 0) :nsec (or remaining-nsecs 0))))))
  
  (defun duration+ (&rest durations)
    "Returns a fresh duration representing the sum of the lengths of its arguments."
  