UP | HOME

+emacs+添加农历纪念日

[2024-04-26 周五 09:00]

纪念日可以显示在 org-agenda 中。要添加公历的纪念日,可以在 org-agenda-files 的某一文件中新建一行,输入以下代码(这里开启iso日期表示法)

;;开启iso日期表示法 年 月 日
(setq calendar-date-style 'iso)

%%(diary-anniversary 1949 10 1) 新中国第 %d 个公历生日

到了10月1日,就会在 org-agenda 中当天日程最下方显示为:

新中国第 75 个公历生日

添加农历纪念日需要用到另一个函数 diary-chinese-anniversary ,但这个函数接受的第三个可选参数 year 是黄帝纪年的第几次循环的第几个项拼接起来的,不能直接填入公元年份。

以农历1949年八月初十(1949年10月1日)为例,这里开启iso日期表示法:

;;开启iso日期表示法 年 月 日
(setq calendar-date-style 'iso)

;;启用内置cal-china包
(use-package cal-china
  :load-path "~/elpa/")

;;cal-china的diary-chinese-anniversary函数仅支持american日期格式,需要let局部定义变量
(defun my/diary-chinese-anniversary (year month day)
  (let ((calendar-date-style 'american))
    (diary-chinese-anniversary month day year nil)
    ))

;;计算给定公历日期的农历年份
(defun my/chinese-year (year month day)
    (+ (* 100 (car (calendar-chinese-from-absolute (calendar-absolute-from-gregorian (diary-make-date year month day)))))
       (cadr (calendar-chinese-from-absolute (calendar-absolute-from-gregorian (diary-make-date year month day))))
       ))

这样就可以通过下面这行代码来显示农历1949年八月初十(1949年10月1日)人的农历生日提醒了。

%%(my/diary-chinese-anniversary (my/chinese-year 1949 10 1) 8 10) 新中国第 %d 个农历生日

▲ 编辑于 [2025-02-05 周三 21:59] | © Published by Emacs 31.0.50 (Org mode 9.7.21) on [2025-02-11 周二 11:53] | RSS