『中西曆轉換工具第二版』使用說明

劉智漢 andyliu@gate.sinica.edu.tw

前言

        對許多研究文史方面的人來說,中西曆的轉換可說是最令人頭大的一件事。有時候因為各朝 代採行曆法的不同,就會造成日期轉換上的困難。為了解決不同曆法間的轉換,因此計算中心特別研發了一套『中西曆轉換工具』,並率先採用網路的查詢方式,讓使用者的查詢不再受限於地點、時間,也解決了以往研究人員翻書查詢的不便。

由於這套程式早期的發展,主要是針對研究人員學術上的使用,因此部分的介面不太適合一般人的使用。例如在『中曆轉西曆』的部分,使用者必須要清楚地知道:國號、帝號、年號,才能正確地查出您想要的結果。如果其中有一項錯誤,那程式可能就會回應您『日期輸入錯誤!』。這對不是專門從事文史研究的社會大眾,便有著非常大的困擾。因此在第二版中,便決定採用更友善的介面,讓一般社會大眾也可以很方便的來使用這套查詢系統,造福更多人。


更新的部分


         由於第一版的設計所採用的是特例處理,因此中曆和西曆兩者有著非常緊密的結合,其中採用了許多的特例處理(請參照『兩千年中西曆轉換資料庫介紹』)。這樣處理的結果,會造成日後想要再增加對其它曆法的轉換時,可能要重新纂寫一套程式,專門用來處理新曆法的轉換。

而第二版和第一版二者的最大不同點在於:第二版的設計引進了新的觀念-『日序』的使用。所謂日序便是事先設定一個基點(例如:西元一年一月一日),以當天的日序當作1,然 後依序遞增(例如以西元一年一月一日當作日序1,西元一年一月二日的日序即為2,依此類推)。採用日序的好處是:將所有的曆法都以日序為基準,當要轉換為其它曆法時,只需要先轉換成日序,然後再依日序轉換為相對應的曆法。因為全世界的日序皆為相同,所以不管要轉換成什麼曆,只要日序相同便轉的出來。舉例來說:當我們要作西曆一年二月十一日轉換成中曆時,首先將西曆轉換成為日序(為42)然後再用日序轉換成相對應的中曆(西漢平帝元始一年一月一日)。如此,每個曆法只要處理各自特殊的部分即可,對其他的曆法部分便不會影響。

此外,舊版的『中西曆轉換工具』各朝皇帝的起訖都是以1月1日作為起點,12月30日作為結束。但是在真實的情況中,很多皇帝並非是以1月1日作為開始;而結束日期也不是12月底。因此新版的『兩千年中西曆轉換』也針對這個問題作了更新。讓每個皇帝的即位時間和結束時間能夠符合歷史。

在新版的中西曆轉換中,如果想要查詢某個皇帝在位的全部年曆,則在輸入查詢條件時不需輸入年號或是年干支,如此,程式會將輸入的皇帝在位的起訖年序都輸出,以便使用者閱讀。而想要查詢某個皇帝某個年號的使用時間年曆,則只要輸入朝代、帝號、年號即可。

其次,為了讓一般的社會大眾能夠很方便的使用這套系統,故在 WEB 介面的選單及顯示 畫面都作了一些更新。在選單方面,為了讓使用者能有更友善的介面,因此選單部分採用了javascript,讓使用者能夠從自動產生出來的選項中選取想要的朝代組合,以獲得結果(可惜的是由於不同瀏覽器之間的相容問題,因此選單自動化的部分只適用於 IE 版。至於 Netscape 則不支援此項功能)。而顯示畫面部分,則採用了 Frame 技術,將查詢條件和顯 示結果分為上下兩個 Frame。如此才可以避免顯示查詢結果時,查詢的條件被自動清除的問題發生。

同時,由於日序的使用,因此在『中曆轉西曆部分』,已經可以做分裂朝代的查詢。當使用者查詢的時間如果有分裂朝代存在,程式會自動將分裂朝代也一併列出。


歲首調整的問題


         自漢武帝太初元年(西元前104年)改曆以來,至今大都採用夏代的建寅制,即自冬至所在 月份起算的第三個月為正月,稱為寅正,但由於朝代更替、等政治因素的影響,若干期間並不是使用寅月作為正月。西元元年後, 只有幾個短暫的時期不採寅正:

新 王莽 始建國元年~地皇四年九月-丑正
前魏 明帝 景初元年四月~景初三年十月-丑正
唐 武后 載初元年~久視一年十二月-子正

這種不以寅月為正月的朝代,在新版的『中西曆轉換工具』中,都已考慮進去,並針對歲首做了調整。以唐武后載初至久視年間為例子來說:

以左圖來對這種情形加以說明。字體較粗的部分表示為正常的月份,較細的部分則表示調整過歲首的月份。
在正常情況下,唐武后永昌元年應該有十二個月,但是到了十一月時,武后改元為「載初」 以十一月為載初元年正月,改採子正,故永昌元年只有十個月,少掉了兩個月。此後,武則天都一直採用子正,直到久視元年的十二月底,原本下一個月應該為「久視二年元月」,但是武后又回復改採『寅正』,將「久視二年元月」改為「久視元年十一月」。因此久視元年會有兩個十一月及十二月。這種因為歲首調整而多出來的月份,有點像是閏月,但又不是真正的閏月。
由於『中西曆轉換工具第二版』已經將這種情形考慮進去,因此當我們在查詢「唐武后永昌元年」的年曆時,畫面上只會出現一到十月的資料。而在查詢「唐武后載初元年」的年曆時也會出現一到十月的資料(十一月武后改元天授)。這樣的顯示精神完全符合『寅正調為子正』的歲首調整;同理,當我們查詢「唐武后久視元年』的年曆時,會顯示出從七月到十二月九個月的年曆(因為久視元年是從七月開始),其中多出來的兩個月即為從「子正調回寅正」所衍生的,如下圖所示:




使用說明(一)-以 IE 為例

         當我們進入兩千年中西曆查詢畫面時,首先見到的是如【圖一】的畫面。畫面右側的選項為切換至西曆轉中曆或中曆轉西曆及相關訊息。使用者只需使用滑鼠點選,就可以使用不同的查詢功能。畫面左側則是想要查詢的欄位條件輸入處。底下分別就『中曆轉西曆』及『西曆轉中曆』分別各舉幾個例子,來讓使用者了解如何查詢以及查詢結果的解讀。

【圖一】中曆轉西曆查詢畫面

【範例一】中曆轉西曆查詢:前魏明帝太和三年

這個範例我們分為三個部分來說明。

首先在輸入查詢條件部分:

由於使用 javascript 來作為選單自動化的引擎,因此當使用者輸入『前魏』之後,剩 下的選單會將帝號這個欄位塞入魏的所有帝號,因此帝號所能選的就只有魏的皇帝年號,不會有其他朝代的帝號,這樣可以避免使用者輸入錯誤的帝號。同理,當使用者在帝號欄位輸入『明帝』之後,年號選單就會自動產生出『魏明帝』的所有年號供使用者選取。如【圖二】所示:

【圖二】使用者輸入畫面

其次,在結果輸出表頭部分:

第一行表示輸入的查詢條件以及這年的起訖日期(沒有輸入月日的情況下),如果出現 兩個以上的朝代,表示為同時期的分裂朝代(這個範例中,魏明帝太和3年有兩個同時期的 分裂朝代,分別是:蜀以及吳)。如果有輸入月份或日期,而且也有分裂朝代的存在,如果分裂朝代的年份,月份或是日期如果都和查詢朝代相同,則不另外列舉!以減少畫面資訊量。第二行則表示西曆的起訖日期。

【圖三】輸出表頭部分

而在結果輸出畫面部分:

第1、11、21這三天輸出的為當日的日干支。如果同時期有分裂朝代存在,而月初時日期相同,則不顯示在畫面上以減少資訊量及提高可讀性。倘若月首日期不同,則列出不同月日以玆區別,顏色的表示則和表頭相同,以利讀者判別。

以這個例子來說:和魏同時期的朝代共有兩個:吳和蜀。由於魏明帝3年1月1日三個朝代的 起始日期皆相同,因此並未列出不同處。但到了1月30日時,吳採用的曆法已經是2月1日, 故列出吳和魏蜀的不同處(此時蜀的日期仍然和魏相同,故不列出),到了4月1日,魏蜀吳三者的日期又相同,故並不列出任何朝代。而大小月也可以從此處看出。

【圖四】輸出內容部分

【範例二】查詢吳會稽王建興一年閏四月的西曆日期

欲查詢吳 會稽王 建興一年 閏 四月對應的西曆日期,須在【圖五】的畫面輸入查詢條 件:

【圖五】中曆轉西曆查詢月份畫面

 

同樣的,在表頭部分也會見到有分裂朝代以及西曆的起訖日期。

【圖六】中曆轉西曆表頭畫面

由於魏及蜀兩朝代的月初日期相同(皆為五月一日),但是卻和吳不同(為閏四月)。 因此在月初的部份列出二者的不同點。

【圖七】中曆轉西曆月曆內容畫面


【範例三】查詢唐 睿宗 景雲 年號的起訖時間

        假設我們想要查『唐 睿宗 景雲』這個年號總共使用了多久,那我們可以在輸入條件的時候,不輸入年份(年干支)、月份以及日期,如此程式就知道所要查詢的是『唐 睿宗 景雲』這個年號的使用時間,會將這個年號所跨的年月日都依序列出。如下圖:

【圖八】年號起訖時間的查詢

【範例四】查詢西元1356年5月的中曆日期

點選畫面右端的『西曆轉中曆』選項之後,會見到【圖九】的畫面。此時輸入我們要查 詢的西曆年份及日期,便可以在結果輸出畫面見到整個月的月曆。

【圖九】西曆轉中曆查詢畫面

 

同樣的,西曆轉中曆部分也有表頭部分用以說明相對應的中國朝代。

【圖十】西曆轉中曆表頭部分

 

而內容部分則顯示出相對應的月曆,上面較粗的字體為西曆的日期,底下較小的字體則 為對應的中曆日期。

【圖十一】西曆轉中曆內容畫面


使用說明(二)-以 Netscape 為例

        由於 Netscape 與 IE 的不同,因此如果使用者使用 Netscape 當作瀏覽器時,就沒有自動化的選單可供使用。而 Netscape 和 IE 在使用上會略有不同。在中曆轉西曆部分,由於朝 代在此採用了選單式的選取,使用者便不需要輸入朝代,直接用選取的方式來選擇想查詢的朝代即可。接下來在年號和帝號方面,如果確定這個年號在中國歷代中只有被某個皇帝使用一次,在作查詢時便可以省略掉帝號直接輸入年號,便可作查詢。甚至可以省略掉朝代,只要輸入帝號加年號就可以做查詢。舉例來說:

當我們想要查詢:新 王莽 地皇 己卯年時,有下列幾種組合可供查詢:

一、國號+年號+年干支(新+地皇+己卯)
二、帝號+年號+年干支(王莽+地皇+己卯)

雖然說用上面兩種方法都會得到正確的結果,但是我們的建議是:盡量使用第二種方式來作 查詢,在某些狀況下會較正確。這是因為歷代中有許多皇帝是沿用前一皇帝的年號(例如:後梁太祖使用『乾化』來作年號而後梁末帝的第一個年號也是『乾化』)遇到這種情形可能就會有問題產生。因此一般都建議使用帝號+年號來作查詢。

還有一種情況就是年干支的查詢。假設使用年干支來作查詢,那麼就不可以輸入年份,這兩個條件是二選一。如果輸入年干支又輸入年份,那程式會忽略掉年干支而直接選用年份作為 查詢條件。但是,日干支和日期二者只能擇一輸入,如果兩個都輸入,則會出現錯誤訊息。

結語

        新版的『中西曆轉換工具』已經不再將使用層面定位於專業研究人員,而是希望這套好用的轉換程式能讓更多的人使用。不論是想要查詢出生時的陰曆日期,亦或是想要知道某某年的在位皇帝是誰?同時期的分裂朝代有哪些?在位時間的全部月曆......這些功能都已經可以在新版的『中西曆轉換工具』中找到。因此,我們希望不論是專業研究人員或是一般社會大眾,都能夠來使用這套程式以發揮它的最大功用。