English | 中文
关于 参考 Lofanmi/chinese-calendar-golang 项目源代码。 此库与源库概念和架构差异较大,难以向源库提交 PR,是完全从 0 开发的一个全新的版本,日历数据取自源库,未来考虑也独立出来 单独维护,或者从第三方源库同步更新。
文档参见 Chinese Calendar
- 公历和中国传统历法,即农历的合历日期表示
- 公历和中国传统历法日期的相互转换
- 中国传统历法日历或日期的基本信息和计算,如年的天数,月的天数,闰月信息
- 日期格式化
- 中国传统历法中二十四节气的计算和数据
- 中国传统干支历的日期和时间
- 中国传统历法日历的生成
- 简单支持西方占星术十二星座的判定
- 中国传统历法中的生肖
- 使用英文
notation
表示我国传统历法/文化的符号系统 - 干支
Notation
,别名SexagesimalCycle
意义为传统历法/文化的一种符号系统,由天干和地支组成 - 天干
Major
,别名CelestialStem
表示传统历法/文化符号系统的主要符号,十天干名采用拼音表示 - 地支
Minor
,别名TerrestrialBranch
表示传统历法/文化符号系统的次要符号,十二地支名采用拼音表示 - 生肖
Sign
,别名Symbol
,ChineseZodiac
表示传统历法/文化的一种特征/象征/图腾,或某种便于记忆流传的符号 - 节气
SolarTerm
,各节气英文名来自 2022 年冬奥会官方翻译,并将香港天文台英文翻译中不同名的作为别名
- 从文化和技术层面厘清概念,重新规划了技术架构,对涉及的关键词汇进行了重命名
- 重构、规范和简化了程序要素
- 增加了更多适用的函数和方法,便于计算与转换
- 支持的农历日期范围有限,仅支持对应公历公元 1900-2100 年范围内的农历
- 二十四节气数据仅限公历公元 1904-3000 年范围内
- 因为我国农历是同时结合太阳和月亮运行规律(其实还包含地球自身的运行)的阴阳历法, 但天体运行规律复杂多样,因此农历的计算结果与实际情况会存在误差,计算结果需要定期校准
参照 《GB/T 33661-2017 农历的编算和颁行》第 4 节
- 以北京时间为标准时间(实际使用时采用服务器本地时区)
- 朔日为农历月的第一个农历日
- 包含节气冬至在内的农历月为农历十一月
- 若从某个农历十一月开始到下一个农历十一月(不含)之间有 13 个农历月,则需要置闰。置闰规则为: 取其中最先出现的一个不包含中气的农历月为农历闰月
- 农历十一月之后第 2 个(不计闰月)农历月为农历年的起始月
为我国的传统历法,是根据日月实际位置计算的阴阳合历。
以严格的朔望月作为历月,同时用加闰月的办法使历年的平均长度接近于回归年。
农历以月亮朔的时刻所在的日期作为每月的月首,朔望月长约 29 天半,因此有的月份 29 天,叫做月小,有的月份 30 天,叫做月大。 农历平年一年 12 个月共 354 天左右,与回归年差 11 天左右,每隔二三年安插一个闰月,有闰月的年份一年十三个月共 384 天左右 (可见闰月固定为 30 天)。
如何设置闰月,是根据 24 节气来确定的。24 节气为农历中所特有,反映的是太阳在天球上的视位置,属于阳历范畴。太阳在天球上 沿着黄道作周年视运动,以春分点为零点起算,每移动黄经 15° 叫做一气,一年共有 24 气。下表列出了 24 节气的名称以及相应的太阳的 视黄经、在公历年里对应的大致日期,表中顺序逢单的叫做节气,逢双的叫做中气,统称为节气。
农历月份的编排和命名规则为:包含冬至在内的农历月固定为农历十一月;如果从某个农历十一月开始到下一个农历十一月(不含) 之间有 13 个农历月,则取其中最先出现的一个不包含中气的农历月为农历闰月;农历十一月之后第 2 个(不计闰月)农历月为农历年 的起始月;除闰月外,农历月按照在其农历年中的先后顺序依次命名为正月、二月、三月……十月、十一月、十二月,闰月采用在其前 一个农历月的名称前加“闰”字的方法命名闰某月。
根据 Lofanmi/chinese-calendar-golang 项目 README 文档 提及所参考的资料来源