Function: nnrss-normalize-date
nnrss-normalize-date is a byte-compiled function defined in
nnrss.el.gz.
Signature
(nnrss-normalize-date DATE)
Documentation
Return a date string of DATE in the style of RFC 822 and its successors.
This function handles the ISO 8601 date format described in URL https://www.w3.org/TR/NOTE-datetime, and also the RFC 822 style which RSS 2.0 allows.
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/nnrss.el.gz
(defun nnrss-normalize-date (date)
"Return a date string of DATE in the style of RFC 822 and its successors.
This function handles the ISO 8601 date format described in
URL `https://www.w3.org/TR/NOTE-datetime', and also the RFC 822 style
which RSS 2.0 allows."
(let (case-fold-search vector year month day time zone given)
(cond ((null date)) ; do nothing for this case
;; if the date is just digits (unix time stamp):
((string-match "\\`[0-9]+\\'" date)
(setq given (time-convert (string-to-number date) t)))
;; RFC 822
((string-match " [0-9]+ " date)
(setq vector (timezone-parse-date date)
year (string-to-number (aref vector 0)))
(when (>= year 1969)
(setq month (string-to-number (aref vector 1))
day (string-to-number (aref vector 2)))
(unless (>= (length (setq time (aref vector 3))) 3)
(setq time "00:00:00"))
(when (and (setq zone (aref vector 4))
(not (string-match "\\`[A-Z+-]" zone)))
(setq zone nil))))
;; ISO 8601
((iso8601-valid-p date)
(let ((decoded (decoded-time-set-defaults (iso8601-parse date))))
(setq year (decoded-time-year decoded)
month (decoded-time-month decoded)
day (decoded-time-day decoded)
time (format "%02d:%02d:%02d"
(decoded-time-hour decoded)
(decoded-time-minute decoded)
(decoded-time-second decoded))
zone (if (equal (decoded-time-zone decoded) "Z")
0
(decoded-time-zone decoded))))))
(if month
(concat (let ((system-time-locale "C"))
(format-time-string "%a, %d %b %Y "
(encode-time 0 0 0 day month year)))
time
(if zone
(format-time-string " %z" nil zone)
""))
(message-make-date given))))