便捷的查看农历日期

有较多需求需要查看农历,

可以从月相中大体推断, 日历中调用M

Wednesday, July 3, 2019: New Moon 3:17am (CST)
Tuesday, July 9, 2019: First Quarter Moon 6:57pm (CST)
Wednesday, July 17, 2019: Full Moon 5:35am (CST)
Thursday, July 25, 2019: Last Quarter Moon 9:25am (CST)
Thursday, August 1, 2019: New Moon 11:13am (CST)

满月是07-17, 今天07-15, 十五 减去 二 等于 十三, 大体推断是农历十三.

但这往往会有正负三两天的误差, 中国农历历经明末与清初的改进之后, 不再以阴历(月亮历)而是以阳历(太阳历)为基础.

在diary中添加一行

;;Day infos
%%(diary-chinese-date)

Agenda中便能查看农历.

碰巧今天是十三.

可以用 cal-china-x 这个 package

2 个赞

这里的cycle 78 year 36 是什么意思?

year 36是天干地支纪年, 60一甲子, 36/60. 不知道78是代表什么.

第78个60年

1 个赞

黄帝纪年第78个60年中的第36年.

1 个赞

不过这样算的话,第78个周期的第36年是77 * 60 + 36 = 4656年,实际上今年是 4717 年,这样计算错在哪里了?想不明白。

一个参考

可能就是4717/60=78.6取小数前算的

(defun calendar-chinese-from-absolute (date)
  "Compute Chinese date (cycle year month day) corresponding to absolute DATE.
The absolute date is the number of days elapsed since the (imaginary)
Gregorian date Sunday, December 31, 1 BC."
  (let* ((g-year (calendar-extract-year
                  (calendar-gregorian-from-absolute date)))
         (c-year (+ g-year 2695))
         (list (append (calendar-chinese-year (1- g-year))
                       (calendar-chinese-year g-year)
                       (calendar-chinese-year (1+ g-year)))))
    (while (<= (cadr (cadr list)) date)
      ;; The first month on the list is in Chinese year c-year.
      ;; Date is on or after start of second month on list...
      (if (= 1 (caar (cdr list)))
          ;; Second month on list is a new Chinese year...
          (setq c-year (1+ c-year)))
      ;; ...so first month on list is of no interest.
      (setq list (cdr list)))
    (list (/ (1- c-year) 60)
          ;; Remainder of c-year/60 with 60 instead of 0.
          (1+ (mod (1- c-year) 60))
          (caar list)
          (1+ (- date (cadr (car list)))))))

看了代码,确实是这样

1 个赞

不是都这样查看吗?

1 个赞

字体很漂亮!