电子万年历中实现农农合成互换_第1页
电子万年历中实现农农合成互换_第2页
电子万年历中实现农农合成互换_第3页
电子万年历中实现农农合成互换_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子万年历中实现农农合成互换

随着电子技术的发展,万年历不再局限于以书的形式出现。以电脑软件或者电子产品形式出现的万年历被称为电子万年历。与传统书本形式的万年历相比,电子万年历得到了越来越广泛的应用。然而,目前一般的电子万年历仅能显示与公历有关的信息,而日常生活等方面往往离不开与农历有关的信息。为了使得电子万年历能更方便地显示更多的信息,笔者对电子万年历涉及到的常用信息处理算法进行了一些研究,提出了一种建表算法。这种建表算法与同类算法相比有以下优点:①需要存储的数据量小。②计算方法简便。③不仅可以显示公历,而且可以显示农历。④不仅可以显示当前日期,而且可以查询其他日期。下面以覆盖年度从1800年到2199年为例,详细介绍实现公历与农历之间相互转换的建表算法。1百年内中国边界期2002—建立基本数据表建立基本数据表的目的是实现公历与农历之间的相互转换。由于公历信息每年基本不变,而农历信息每年变化很大,因此,对于覆盖年度里的每一年,在基本数据表里主要存储与农历有关的数据:该年年份、该年闰月有无以及闰月的月份、该年各月的大小、从元旦到正月初一的天数(即岁首积日差)。在基本数据表里笔者用8位十六进制数D7D6D5D4D3D2D1D0(4个字节)描绘一年的信息,其中每位十六进制数又可以用4位二进制数(b3b2b1b0)表示。下面以一个具体的例子来说明基本数据表里的数据格式(图1)。1)D7(b3b2b1b0)的前2两位b3b2表示百年值(譬如1982年所对应的百年值为19),后2位表示岁首积日差对15求商得到的商值(整数)。要实现覆盖年度1800到2199年的目标,只要前2位数(b3b2)对应的十进制数再加上18(十进制数)就能得到该年的百年值,即00代表1800年,01代表1900年,10代表2000年,11代表2100年。通过大量数据统计可得:对于任何年份,其岁首积日差均少于60日,而从1800年到2199年每一年的岁首积日差均不超过50日。因此,用D7(b3b2b1b0)的后2位b1b0就能表示岁首积日差对15求商得到的商值,即00代表0日,01代表15日,10代表30日,11代表45日。本例中D7表示该年年份为1900年到1999年中的某一年(具体由D6和D5决定),岁首积日差为30到44日中的某值(具体天数由D0决定)。2)D6(b3b2b1b0)前1位b3表示该年闰月大小,后3位b2b1b0表示该年所在百年内的年份值(譬如1982年所对应的百年内的年份值为82)对16求商得到的商值。高位b3为1代表闰月小,为0代表无闰月或者闰月大;低3位b2b1b0与百年内的年份值有以下对应关系,000代表0年,001代表16年,010代表32年,011代表48年,100代表64年,101代表80年,110代表96年,111空余。本例中D6表示无闰月或者有闰月而且是大月(有无闰月具体由D1决定),该年所在百年内年份值在80年到95年之间某值(具体由D5决定)。3)D5表示该年所在百年内年份值对16求商后得到的余值,从0000到1111分别代表从0到15年。本例中D5表示6年,综合上面D7D6可以知道本例中所举的年份是1986年。4)D4D3D2的二进制形式表示各月(依次从12月到1月)大小组合,0代表大月,1代表小月。本例中十六进制D4D3D2为0XD45即二进制110101001001,代表1,4,7,9,11,12月为小月,其余月为大月。5)D1表示闰月出现的月份,从0001到1100分别代表闰月出现在12个月中从1到12月的某月,0000表示没有闰月,从1101到1111空余。本例中0000表示没有闰月。6)D0表示岁首积日差对15求商得到的余值,从0000到1110代表从0到14天。D7后2位和D0共同表示岁首积日差。本例中D0为0X9,综合上面信息可以推得1986年岁首积日差是39日。2标准麻黄的特点要实现公历与农历之间的相互转换,为了方便起见,笔者引入5个变量:标准阳历、标准阴历、准公历、准农历和假积日。其中,标准阳历和标准阴历的特点是每月均为30天;准公历和准农历为初步确定的公历和农历,有待验证和修正(在后面具体介绍);假积日是某日对应月数乘以30加上该日对应的日数。2.1从越界改革开放到麻黄1979年笔者通过4个转换过程来实现公历到农历的转换(即公历→标准阳历→标准阴历→准农历→农历)。在实现从公历到农历的转换过程中,不但要用到基本数据表里该年的数据,而且还可能要用到上年的数据。因此,根据该年的公历年份,先查询基本数据表得到该年和上年数据,然后解释得到的数据所代表的有用(可能用到的)信息。这里以1981年4月13日为例具体介绍从公历到农历的转换。因为本例中1981年和1980年的数据分别是0X65126D05和0X75025601,该数据代表的有用信息为:1981年无闰月,1,3,4,6,7,10月是小月,其余月是大月,岁首积日差是35日;1980年无闰月,11,12月是大月。1标准县级假积日的计算根据该公历日期及该日前几个月大小(判断是否是闰年),转换公历成标准阳历,求出标准阳历的假积日。通过公历日数加上大月个数求得某日数(若公历日期在2月后,平年则日数再减去2,闰年则日数再减去1)。如果该日数小于1,那么,30加上该日数为标准阳历日数,公历月数减去1为标准阳历月数;如果该日数大于30,那么,该日数减去30为标准阳历日数,公历月数加上1为标准阳历月数;否则,该日数为标准阳历日数,公历月数为标准阳历月数。根据假积日的定义求出标准阳历的假积日。因为,1981年是平年,4月前有2个大月和2月,13+2-2=13,1<13<30。所以,公历1981年4月13日是标准阳历1981年4月13日,标准阳历的假积日是4×30+13=133日。2计算某刑期为标准东南角,其符合以下情况标准阳历的假积日减去岁首积日差得到标准阴历的假积日。如果该假积日大于30,直接转换成标准阴历(该假积日对30求商得到商值和余值,商值为标准阴历月数,余值为标准阴历日数);如果该假积日不大于30,用30减去该假积日得到某日数,转换该日数成标准阴历月日(该日数对30求商得到商值和余值,12月减去该商值为标准阴历月数,30日减去该余值为标准阴历日数),标准阳历年数减去1为标准阴历年数。因为,本例中标准阴历的假积日是133-35=98日,98>30,98/30=3,98%30=8,1981年3月前无闰月,有1个小月,所以,公历1981年4月13日是标准阴历1981年3月8日。3月数统计的准重判断该日对应标准阴历和公历年份关系。如果两者在同一年,那么,根据标准阴历对应农历该月前有无闰月以及各月大小(若有闰月则先把月数减去1,再判断该月是否闰月,然后把日数加上小月个数),得到准农历;如果两者不在同一年,那么,根据上年该月后(包括当月)有无闰月以及该月后各月大小(日数减去小月个数,若有闰月则该月前面加闰字),得到准农历。因为本例中标准阴历和公历在同一年,1981年3月前无闰月,有一个小月,所以公历1981年4月13日是准农历1981年3月9日。4修正的农村金融实行准农耕日期和显著减少选择判断该日准农历和标准阴历月数关系。如果准农历比标准阴历多一个月,那么,根据标准阴历当月大小,修正得到农历(若月小则准农历日数再加上1为公历日数);如果准农历比标准阴历少一个月,那么,根据准农历当月大小,修正得到农历(若月小则准农历日数再减去1为公历日数);否则不用修正。因为3月9日和3月8日在同一个月,所以公历1981年4月13日是农历1981年3月9日。2.2介绍转换过程笔者通过四个转换过程来实现农历到公历的转换(即农历→标准阴历→标准阳历→准公历→公历)。在实现过程中需要使用基本数据表中的数据,因此,在介绍转换过程前,先根据举例中该年农历年代,查询基本数据表得到该年数据,然后解释数据代表的信息。这里以农历2006年8月15日为例具体介绍从农历到公历的转换。因为本例中,2006年数据是0X98622A7D,该数据代表信息:2006年有闰7月而且闰月为小月,2,4,6,10月为小月,其余月为大月,岁首积日差为28日。1计算某周期下标准微生物月数根据需要转换的农历日期及其该月前几个月有无闰月、农历各月大小,转换农历成标准阴历,求出标准阴历的假积日。通过农历日数减去小月个数(包括闰月)求得某日数。如果该日数小于1,那么,该日数加上30为标准阴历日数,农历月数减去1为标准阴历月数;否则,该日数为标准阴历日数,农历月数为标准阴历月数。若有闰月则标准阴历月数再加上1。根据假积日定义求出标准阴历的假积日。因为,2006年8月前有闰7月,2,4,6、闰7月4个月是小月,8+1=9月,15-4=11日,所以,农历2006年8月15日就是标准阴历2006年9月11日,标准阴历的假积日是9×30+11=281日。2标准支付及能谱分析标准阴历的假积日加上岁首积日差得到标准阳历的假积日,该假积日对30求商得到商值和余值,该商值为标准阳历月数,该余值为标准阳历日数,确定出标准阳历。因为,岁首积日差是28日,281+28=309日,309/30=10月,309%30=9日,所以,农历2006年8月15日是标准阳历10月9日。3选择适用公务该月的日期标准阳历日数减去对应公历同日(月数和日数相同)前几个月中大月个数,求得某日数(如果标准阳历在2月以后,平年则该日数再加上2,闰年则该日数再加上1)。判断该日数是否在公历该月范围内。如果该日数不大于零,那么,上月日数减去该日数为准公历日数,标准阳历月数减去1为准公历月数;如果该日数大于公历该月日数,那么,该日数减去公历该月日数为准公历日数,标准阳历月数加上1为准公历月数;否则,该日数为准公历日数,标准阳历月数为准公历月数。因为,2006年10月前有5个大月,2006年是平年,标准阳历月在2月以后,9-5+2=6,6大于0且小于30(10月为30日),所以,农历2006年8月15日是准公历10月6日。4按标准麻黄里月数关系如果准公历月数大于12,就把准公历月数减去12,年数加上1。判断准公历和标准阳历(或减去12后)月数的关系。如果准公历比标准阳历少一个月,那么,根据标准阳历该月大小,修正得到公历(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论