anchor.diff:         (values nsec sec day)))
       (otherwise
        (with-decoded-timestamp (:nsec nsec :sec sec :minute minute :hour hour
  -                              :day day :month month :year year :timezone +utc-zone+)
  +                              :day day :month month :year year :timezone timezone :offset utc-offset)
            time
          (ecase part
            (:sec (setf sec new-value))
  
positive.code:                  (encode-timestamp-into-values nsec sec minute hour
                                                 (%fix-overflow-in-days day month-new year-new)
                                                 month-new year-new
                                                 :offset 0)))))
      (ecase part
        ((:nsec :sec :minute :hour :day :day-of-week)
         (direct-adjust part offset
  
negative.code: (defmacro adjust-timestamp! (timestamp &body changes)
    (%expand-adjust-timestamp timestamp changes :functional nil))
  
  (defun %set-timestamp-part (time part new-value &key (timezone *default-timezone*) utc-offset)
    ;; TODO think about error signalling. when, how to disable if it makes sense, ...
    (case part
      ((:nsec :sec-of-day :day)
  