分類
好用軟體

中西曆轉換

這個是用來對中西曆轉換對照用的, 可以方便看西方何時, 對照東方的何時, 不過特別有意思的是中國的年號, 在位皇帝, 年號等資訊也可以可從這裡看見.

網址在這裡: http://sinocal.sinica.edu.tw/

這是中央研究院的兩千年中西曆轉換的網頁工具.

例如以東漢光武帝建武元年, 對應到西元的時間是西元25年, 可以利用下面的方式輸入:
按下上面的中曆轉西曆後, 就會產生如下畫面:

得到: 東漢光武帝建武年間 西元25年7月15日(星期日) ~ 56年5月3日(星期一)

如此一來就可以很方便地將中國朝代在位皇帝及年號等資訊查找出來, 也是一個很實用的工具.
再來試看看比較近代的清朝看看, 如清光緒帝:
清德宗光緒年間 西元1875年2月6日(星期六) ~ 1909年1月21日(星期四)

唐太宗呢? 來看看:
唐太宗貞觀年間 西元627年1月23日(星期五) ~ 650年2月6日(星期六)

真的還蠻實用的呢!

再來看看他的程式中記錄這些朝代, 皇帝, 年號等的資訊是在這支程式裡有記載: http://sinocal.sinica.edu.tw/empreigns.js
這樣就有一份整理很清楚的資料, 而且已經整理程式化了.

[2011/10/11 18:56]
從上面的資料來看, 年號最多的皇帝是唐武后, 也就是武則天, 共用了18個年號, 真的太厲害了, 常在改年號耶: 光宅,垂拱,永昌,載初,天授,如意,長壽,延載,證聖,天冊萬歲,萬歲登封,萬歲通天,神功,聖曆,久視,大足,長安,神龍.

.net下enum列舉與string文字間的轉換

有時會用到這樣的功能, 就是列舉的名稱和列舉的值做轉換. 這個在 delphi 裡是利用 RTTI (Runtime Type Information)來達成, 在 .net 裡的作法也很單純, 利用 Enum 的 CLASS 方法(靜態方法)就可以做到了.

先來看看由 enum 轉回字串, 是使用 Enum.GetName 方法, 要傳入的是 enum 的 type 及該 enum object 即可, 程式碼如下:

public enum enumMyFruit  
{  
    Apple, Lemon, Orange  
}  
....  
enumMyFruit fruit1 = enumMyFruit.Apple;  
string result = Enum.GetName(fruit1.GetType(), fruit1);

再來是利用 string value 轉入 enum 的方法, 使用 Enum.Parse , 傳入一樣是 enum 的 type, 及傳入 string 的值, 最後有個參數是是否忽略區分大小寫的真值, 範例如下:

 public enum enumMyFruit  
{  
   Apple, Lemon, Orange  
}  
....  
enumMyFruit fruit1 =  Enum.Parse(typeof(enumMyFruit), "Apple", true);

其中關於第一個部分, 使用 Enum.GetName 其實可以直接用 fruit1.ToString() 就拿到了, 不過根據這篇文章: http://www.cnblogs.com/smalldust/archive/2007/02/27/384657.html 提到了, 效率不太一樣, 就我個人覺得, ToString() 還是少用吧, 用 GetName 還是比較正規一點, 再加上效率有差的話, 其實還是用 GetName 好.

後面利用 string 轉入 enum 則要注意一下, 若發生找不到的狀況時, 將會有 exception 發生, 這個是需要注意的, 因為本來就有可能會發生這個問題, 要處理好這個部分的程式碼囉.

參考資料:
http://snipplr.com/view/3585/enum-to-string-and-string-to-enum/
http://www.cnblogs.com/smalldust/archive/2007/02/27/384657.html