Function: decoded-time--alter-second

decoded-time--alter-second is a byte-compiled function defined in time-date.el.gz.

Signature

(decoded-time--alter-second TIME SECONDS)

Documentation

Increase the time in TIME by SECONDS.

Source Code

;; Defined in /usr/src/emacs/lisp/calendar/time-date.el.gz
(defun decoded-time--alter-second (time seconds)
  "Increase the time in TIME by SECONDS."
  (let* ((time-sec (time-convert (or (decoded-time-second time) 0) t))
	 (time-hz (cdr time-sec))
	 (old (time-add time-sec
			(time-convert
			 (+ (* 3600 (or (decoded-time-hour time) 0))
			    (* 60 (or (decoded-time-minute time) 0)))
			 time-hz)))
	 (new (time-convert (time-add old seconds) t))
	 (new-hz (cdr new))
	 (secsperday (time-convert 86400 new-hz)))
    ;; Hm...  DST...
    (while (time-less-p new 0)
      (decoded-time--alter-day time nil)
      (setq new (time-add new secsperday)))
    (while (not (time-less-p new secsperday))
      (decoded-time--alter-day time t)
      (setq new (time-subtract new secsperday)))
    (let ((sec (time-convert new 'integer)))
      (setf (decoded-time-second time) (time-add
					(time-convert (% sec 60) new-hz)
					(time-subtract
					 new (time-convert sec new-hz)))
	    (decoded-time-minute time) (% (/ sec 60) 60)
	    (decoded-time-hour time) (/ sec 3600)))))