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))))))