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