Function: icalendar-print-dur-value

icalendar-print-dur-value is a byte-compiled function defined in icalendar-parser.el.gz.

Signature

(icalendar-print-dur-value DUR)

Documentation

Serialize an icalendar-dur-value to a string.

Source Code

;; Defined in /usr/src/emacs/lisp/calendar/icalendar-parser.el.gz
(defun ical:print-dur-value (dur)
  "Serialize an `icalendar-dur-value' to a string."
  (if (integerp dur)
      ;; dur-value specified in weeks can only contain weeks:
      (format "%sP%dW" (if (< dur 0) "-" "") (abs dur))
    ;; otherwise, show all the time units present:
    (let* ((days+- (or (decoded-time-day dur) 0))
           (hours+- (or (decoded-time-hour dur) 0))
           (minutes+- (or (decoded-time-minute dur) 0))
           (seconds+- (or (decoded-time-second dur) 0))
           ;; deal with the possibility of mixed positive and negative values
           ;; in a time delta list:
           (sum (+ seconds+-
                   (* 60 minutes+-)
                   (* 60 60 hours+-)
                   (* 60 60 24 days+-)))
           (abssum (abs sum))
           (days (/ abssum (* 60 60 24)))
           (sumnodays (mod abssum (* 60 60 24)))
           (hours (/ sumnodays (* 60 60)))
           (sumnohours (mod sumnodays (* 60 60)))
           (minutes (/ sumnohours 60))
           (seconds (mod sumnohours 60))
           (sign (when (< sum 0) "-"))
           (time-sep (unless (and (zerop hours) (zerop minutes) (zerop seconds))
                       "T")))
      (concat sign
              "P"
              (unless (zerop days) (format "%dD" days))
              time-sep
              (unless (zerop hours) (format "%dH" hours))
              (unless (zerop minutes) (format "%dM" minutes))
              (unless (zerop seconds) (format "%dS" seconds))))))