Function: timezone-fix-time
timezone-fix-time is a byte-compiled function defined in
timezone.el.gz.
Signature
(timezone-fix-time DATE LOCAL TIMEZONE)
Documentation
Convert DATE (default timezone LOCAL) to YYYY-MM-DD-HH-MM-SS-ZONE vector.
If LOCAL is nil, it is assumed to be GMT. If TIMEZONE is nil, use the local time zone.
Source Code
;; Defined in /usr/src/emacs/lisp/timezone.el.gz
(defun timezone-fix-time (date local timezone)
"Convert DATE (default timezone LOCAL) to YYYY-MM-DD-HH-MM-SS-ZONE vector.
If LOCAL is nil, it is assumed to be GMT.
If TIMEZONE is nil, use the local time zone."
(let* ((date (timezone-parse-date date))
(year (string-to-number (aref date 0)))
(year (cond ((< year 69)
(+ year 2000))
((< year 100)
(+ year 1900))
((< year 1000) ; possible 3-digit years.
(+ year 1900))
(t year)))
(month (string-to-number (aref date 1)))
(day (string-to-number (aref date 2)))
(time (timezone-parse-time (aref date 3)))
(hour (string-to-number (aref time 0)))
(minute (string-to-number (aref time 1)))
(second (string-to-number (aref time 2)))
(local (or (aref date 4) local)) ;Use original if defined
(timezone
(or timezone
(timezone-time-zone-from-absolute
(timezone-absolute-from-gregorian month day year)
(+ second (* 60 (+ minute (* 60 hour)))))))
(diff (- (timezone-zone-to-minute timezone)
(timezone-zone-to-minute local)))
(minute (+ minute diff))
(hour-fix (floor minute 60)))
(setq hour (+ hour hour-fix))
(setq minute (- minute (* 60 hour-fix)))
;; HOUR may be larger than 24 or smaller than 0.
(cond ((<= 24 hour) ;24 -> 00
(setq hour (- hour 24))
(setq day (1+ day))
(when (< (timezone-last-day-of-month month year) day)
(setq month (1+ month))
(setq day 1)
(when (< 12 month)
(setq month 1)
(setq year (1+ year)))))
((> 0 hour)
(setq hour (+ hour 24))
(setq day (1- day))
(when (> 1 day)
(setq month (1- month))
(when (> 1 month)
(setq month 12)
(setq year (1- year)))
(setq day (timezone-last-day-of-month month year)))))
(vector year month day hour minute second timezone)))