Function: solar-equinoxes-solstices

solar-equinoxes-solstices is a byte-compiled function defined in solar.el.gz.

Signature

(solar-equinoxes-solstices)

Documentation

Local date and time of equinoxes and solstices, if visible in the calendar.

Requires floating point.

Source Code

;; Defined in /usr/src/emacs/lisp/calendar/solar.el.gz
;;;###holiday-autoload
(defun solar-equinoxes-solstices ()
  "Local date and time of equinoxes and solstices, if visible in the calendar.
Requires floating point."
  (let* ((m displayed-month)
         (y displayed-year)
         (calendar-standard-time-zone-name
          (cond
           (calendar-time-zone calendar-standard-time-zone-name)
           ((eq calendar-time-zone-style 'numeric) "+0000")
           (t "UTC")))
         (calendar-daylight-savings-starts
          (if calendar-time-zone calendar-daylight-savings-starts))
         (calendar-daylight-savings-ends
          (if calendar-time-zone calendar-daylight-savings-ends))
         (calendar-time-zone (if calendar-time-zone calendar-time-zone 0))
         (k (progn
              (calendar-increment-month m y (cond ((= 1 (% m 3)) -1)
                                                  ((= 2 (% m 3))  1)
                                                  (t              0)))
              (1- (/ m 3))))
         (d0 (solar-equinoxes/solstices k y))
         (d1 (list (car d0) (floor (cadr d0)) (nth 2 d0)))
         (h0 (* 24 (- (cadr d0) (floor (cadr d0)))))
         (adj (dst-adjust-time d1 h0))
         (d (list (caar adj)
                  (+ (car (cdar adj))
                     (/ (cadr adj) 24.0))
                  (cadr (cdar adj))))
         ;; The following is nearly as accurate, but not quite:
         ;; (d0 (solar-date-next-longitude
         ;;     (calendar-astro-from-absolute
         ;;      (calendar-absolute-from-gregorian
         ;;       (list (+ 3 (* k 3)) 15 y)))
         ;;     90))
         ;; (abs-day (calendar-astro-to-absolute d)))
         (abs-day (calendar-absolute-from-gregorian d)))
    (list
     (list (calendar-gregorian-from-absolute (floor abs-day))
           (format "%s %s"
                   (nth k (if (and calendar-latitude
                                   (< (calendar-latitude) 0))
                              solar-s-hemi-seasons
                            solar-n-hemi-seasons))
                   (solar-time-string
                    (* 24 (- abs-day (floor abs-day)))
                    (if (dst-in-effect abs-day)
                        calendar-daylight-time-zone-name
                      calendar-standard-time-zone-name)))))))