伊斯蘭教歷,又稱為回歷。目前中國市面上的回歷大多是印刷品,很少有相關(guān)電子產(chǎn)品的面世,利用本文設(shè)計成果制作出的萬年歷將給廣大中國穆斯林群眾的宗教和日常生活帶來便利。
筆者的設(shè)計是一款帶有回歷查詢功能的萬年歷,其選用基于ARM11芯片的飛凌OK6410開發(fā)板為硬件平臺,軟件開發(fā)采用了VS2005集成開發(fā)環(huán)境,并安裝了OK6410 SDK編譯軟件,采用C++語言編程,最終在Windows CE嵌入式系統(tǒng)下完成。
公歷又稱為格里歷,它的前身是“儒略歷”。儒略歷于公元前46年編制,其歷以公元前45年1月1日為歷元,取回歸年長度為365.25天。該歷法的閏年規(guī)則是每隔3年置1閏年。儒略歷一直使用至1582年10月4日才被廢除,代替它的新歷就是格里歷,格里歷修改了閏年規(guī)則,凡公元年數(shù)能被4整除的即閏年,但公元年數(shù)后邊帶兩個“0”的世紀年,僅能被400整除的年份仍為閏年,其他世紀年被調(diào)整為平年,取回歸年的長度為365.2425天。羅馬教皇格里高利十三世于1582年10月15日頒發(fā)了格里歷,一直使用至今。
回歷是純太陰歷。其歷法為:平年354天,閏年355天。一年為12個月,奇數(shù)月為大月30天;偶數(shù)月為小月29天;十二月,平年為29天,閏年為30天。每30年為一個循環(huán)周期,每個循環(huán)周期中平年19個,閏年11個。每30年的第2、5、7、10、13、16、18、21、24、26、29各年為閏年,其余各年為平年。該歷元年元旦相當于儒略歷622年7月16日,取每年平均長度為354.3667天。
圖1 公歷轉(zhuǎn)回歷流程圖
圖2 回歷轉(zhuǎn)公歷流程圖
雖然兩種歷法依照各自的規(guī)律運行,但是不管采取哪一種歷法,總天數(shù)是不變的,轉(zhuǎn)換算法的核心是先算出總的天數(shù),然后再按照各自的規(guī)律進行推算,最終得出準確的日期。
從上面的歷法介紹,我們知道公歷在1582年10月5日之前指的是儒略歷,1582年10月14日之后,指的是格里歷,而1582年10月5日至10月14日之間的日期是不存在的。這是公歷和回歷轉(zhuǎn)換過程需要注意的,因為儒略歷的算法和格里歷的算法是不同的。
公歷轉(zhuǎn)換成回歷分為三個步驟:
首先判斷公歷日期是否大于1582年10月14日。
其次,要計算出具體的總天數(shù)。當公歷日期大于1582年10月14日時,采用格里歷歷法計算總天數(shù)。當公歷日期小于1582年10月14日時,采用儒略歷歷法計算總天數(shù)。兩種歷法計算總天數(shù)的公式[2]如下:
最后按照回歷的歷法規(guī)則推算出準確的日期。下面介紹一下推算的公式:(設(shè)整數(shù)變量L、J、S和N)
圖3 程序運行的界面
回歷轉(zhuǎn)換成公歷也分為三個步驟:
首先計算要轉(zhuǎn)換回歷日期所對應(yīng)的儒略日總天數(shù)?;貧v日期計算儒略日數(shù)的公式如下:(注:轉(zhuǎn)換前回歷日期的年月日依次標記為HY、HM、HD。)
其次要判斷儒略日總天數(shù)是否大于2299160,這里的2299160是公歷1582年10月4日所對應(yīng)的儒略日總天數(shù)。
最后按照公歷的歷法進行推算出準確的公歷日期。這里說明一下,當儒略日總天數(shù)大于2299160時采用格里歷歷法進行計算,否則采用儒略歷歷法進行計算。下面介紹一下推算過程:
(1)按照格里歷歷法進行推算(設(shè)整數(shù)變量L、N、I、S和J)
(2)按照儒略歷歷法進行推算(設(shè)整數(shù)變量L、N、I、K和J)
轉(zhuǎn)換后的公歷日期年月日依次標記為整數(shù)變量G_Y、G_M和G_D
圖1是公歷轉(zhuǎn)換為回歷的流程圖和部分源代碼
部分代碼如下:
圖2是回歷轉(zhuǎn)換為公歷的流程圖和部分源代碼。
部分代碼如下:
查詢功能主要是使用了上述的回歷轉(zhuǎn)公歷算法,一旦獲取了回歷年份,該回歷年的伊斯蘭教重大節(jié)日就可以查詢出對應(yīng)的公歷日期。伊斯蘭教的三個重大節(jié)日開齋節(jié)、古爾邦節(jié)和圣紀節(jié)在回歷中都有明確的日期,它們依次是10月1日、12月10日和3月12日,所以將查詢的回歷年份加上節(jié)日對應(yīng)的回歷日期,直接代入我們前面介紹的回歷轉(zhuǎn)換公歷的算法,即可以得到準確的公歷日期。
經(jīng)測試,程序在飛凌OK6410開發(fā)板上可以正確實現(xiàn)公歷592年6月18日以后的所有公歷日期和回歷日期進行相互轉(zhuǎn)換,查詢功能運行正常,達到了設(shè)計的目的。
本設(shè)計主要實現(xiàn)了三大功能,首先是正常顯示并可以修改當前時間(包含公歷、回歷的年月日和時分秒信息),第二是實現(xiàn)回歷日期和公歷日期的相互查詢,第三是輸入回歷任意年份可以查詢該回歷年伊斯蘭教重大節(jié)日所對應(yīng)的公歷日期。但是本設(shè)計還需要完善一些功能,比如每天五次禮拜的倒計時提醒和中國的農(nóng)歷以及一些公歷節(jié)日的查詢等功能,才能成為一款真正適合中國穆斯林的萬年歷產(chǎn)品。
[1]烏志鴻.1500年回中西歷歷譜[M].銀川:寧夏人民出版社,2011:13-19.
[2]J.Thomann.Conversion of Islamic and Christian dates[DB/OL].http://www.oriold.uzh.ch/static/hegira.html,2006-05-26.