Function: calendar-chinese-compute-year
calendar-chinese-compute-year is a byte-compiled function defined in
cal-china.el.gz.
Signature
(calendar-chinese-compute-year Y)
Documentation
Compute the structure of the Chinese year for Gregorian year Y.
The result is a list of pairs (i d), where month i begins on absolute date d, of the Chinese months from the Chinese month following the solstice in Gregorian year Y-1 to the Chinese month of the solstice of Gregorian year Y.
Source Code
;; Defined in /usr/src/emacs/lisp/calendar/cal-china.el.gz
(defun calendar-chinese-compute-year (y)
"Compute the structure of the Chinese year for Gregorian year Y.
The result is a list of pairs (i d), where month i begins on absolute date d,
of the Chinese months from the Chinese month following the solstice in
Gregorian year Y-1 to the Chinese month of the solstice of Gregorian year Y."
(let* ((next-solstice (calendar-chinese-zodiac-sign-on-or-after
(calendar-absolute-from-gregorian
(list 12 15 y))))
(list (calendar-chinese-month-list
(1+ (calendar-chinese-zodiac-sign-on-or-after
(calendar-absolute-from-gregorian
(list 12 15 (1- y)))))
next-solstice))
(next-sign (calendar-chinese-zodiac-sign-on-or-after (car list))))
(if (= (length list) 12)
;; No room for a leap month, just number them 12, 1, 2, ..., 11.
(cons (list 12 (car list))
(calendar-chinese-number-months (cdr list) 1))
;; Now we can assign numbers to the list for y.
;; The first month or two are special.
(if (or (> (car list) next-sign) (>= next-sign (cadr list)))
;; First month on list is a leap month, second is not.
(append (list (list 11.5 (car list))
(list 12 (cadr list)))
(calendar-chinese-number-months (cddr list) 1))
;; First month on list is not a leap month.
(append (list (list 12 (car list)))
(if (>= (calendar-chinese-zodiac-sign-on-or-after (cadr list))
(nth 2 list))
;; Second month on list is a leap month.
(cons (list 12.5 (cadr list))
(calendar-chinese-number-months (cddr list) 1))
;; Second month on list is not a leap month.
(calendar-chinese-number-months (cdr list) 1)))))))