http://www.paper.edu.cn
-1-
电子万年历中公历农历互换算法研究
杨河理,熊晓东
长江大学电子信息学院,湖北荆州(434023)
摘 要:介绍了电子万年历中实现公历农历互换的一种实用算法。用四个字节的数据可以准
确地描述任意一年与年历有关的信息,将需要实现公历农历互换的每一年的四个字节的数据
有机存放在一起形成一个基本数据表。电子万年历中的计算机通过查询预先存储在计算机存
储器里的基本数据表,得到转换需要的数据信息,根据转换要求和本算法提供的互换算法,
从而实现公历农历的互换。这种互换算法的优点是存储的数据量少,计算简便,实用性强。
关键词:电子万年历,公历,农历,互换,算法,研究
随着电子技术的发展,万年历目前已经不再局限于以书本形式出现。以电脑软件或者电
子产品形式出现的万年历被称为电子万年历。与传统书本形式的万年历相比,电子万年历得
到了越来越广泛的应用
[1]
。然而,目前一般的电子万年历仅能显示与公历有关的信息,而日
常生活等方面往往离不开与农历有关的信息。为了使得电子万年历能更方便地显示更多的信
息,笔者对电子万年历涉及到的常用信息处理算法进行了一些研究。
在研究的基础上笔者提出了一种建表算法。这种建表算法与同类算法相比有以下优点:
①需要存储的数据量小。②计算方法简便。③不仅可以显示公历,而且可以显示农历。④不
仅可以显示当前日期,而且可以查询其它日期。
由于建表算法以基本数据表为基础,因此下面先介绍如何建立基本数据表,然后详细介
绍实现公历与农历之间相互转换的建表算法(以覆盖年度从 1800 年到 2199 年为例)。
1. 建立基本数据表
建立基本数据表的目的是实现公历与农历之间的相互转换。为了下面介绍方便,笔者首
先简单介绍一下我国现行的公历和农历。
公历每年有 12 个月,其中 1、3、5、7、8、10、12 月为大月,每月 31 天,4、6、9、
11 月为小月,每月 30 天。公历有闰年平年之分,若某年是闰年,则该年 2 月有 29 天,全
年有 366 天;若某年是平年,则该年 2 月有 28 天,全年有 365 天。
农历一般全年有 12 个月,如果出现闰月则全年就有 13 个月。大月 30 天,小月 29 天,
大小月出现月份不确定。
由于公历信息每年基本不变,而农历信息每年变化很大,因此,对于覆盖年度里的每一
年,在基本数据表里主要存储与农历有关的数据:该年年份、该年闰月有无以及闰月的月份、
该年各月的大小、从元旦到正月初一的天数(即岁首积日差
[2]
)。
在基本数据表里笔者用 8 位十六进制数 D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
(四个字节)描绘一年的信
息,其中每位十六进制数又可以用 4 位二进制数(b
3
b
2
b
1
b
0
)表示。下面以一个具体的例子
来说明基本数据表里的数据格式(图 1)。
图 1 基本数据表里每年的基本信息格式