.net中的日曆轉換

在 .net 中有個 System.Globalization 裡, 有許多國家的日曆可用, 像是民國年的轉換, 或是農曆年的轉換, 這個真的很有意思. 也免除了在程式中, 程式設計人員的轉換麻煩.

先來看看民國年的部分, 程式如下:

TaiwanCalendar tc = new TaiwanCalendar();            
int year = tc.GetYear(DateTime.Now); //現在是西元2010年
MessageBox.Show(year.ToString()); // 會秀出 99

有趣的, 我想試看看早於 1911 年(也就是民國還未成立時, 會發生什麼事), 結果如下, 會發生一個 OutOfRangeException 如下圖:

也就是必須是西元陽曆1912/1/1 00:00:00 ~ 9999/12/31 23:59:59 才行, 否則會有 Exception.

這樣當然很合理啦. 也避免一些錯誤輸入的狀況.

另外來看看農曆, (或稱陰曆, 月亮曆), 來試看看今天是農曆的日期:

TaiwanLunisolarCalendar tlc = new TaiwanLunisolarCalendar();            
int month = tlc.GetMonth(DateTime.Now);
int day = tlc.GetDayOfMonth(DateTime.Now);
MessageBox.Show(month.ToString() + "/" + day.ToString());

今天是 2010/6/29, 秀出的結果是 5/18 相當正確, 十分方便. 不過似乎沒有反過來的查法, 但有正向查詢應該就很夠用了, 反向查再稍加手腳即可.

另外也可以取出天干(GetCelestialStem()), 地支(GetTerrestrialBranch())的功能. 還有日本曆(JapaneseCalendar), 很有意思.

參考資料:
http://dotnetmis91.blogspot.com/2010/06/dotnet-systemglobalization.html
http://anita-lo.blogspot.com/2008/03/net_20.html
這篇是日本曆的年號: http://blog.csdn.net/xue1234567890/archive/2009/10/24/4723056.aspx

撰寫big5的asp.net程式

由於預設的 asp.net 程式開發是使用 utf-8 的編碼, 所以若是要開發 big5 的 asp.net 程式, 需要做一些調整.

可以參考這篇有關 globalization 項目設定的網頁: http://msdn.microsoft.com/zh-tw/library/hy4kkhe0(VS.80).aspx

其實很單純的將 web.config 中的 system.web 內的 globalization 的屬性: requestEncoding 及 responseEncoding 做些調整即可. 由於預設的是:

<globalization requestEncoding="utf-8" 
               responseEncoding="utf-8" 
               fileEncoding="" 
               culture="" 
               uiCulture="" 
               enableClientBasedCulture="false" 
               responseHeaderEncoding="utf-8" 
               resourceProviderFactoryType="" 
               enableBestFitResponseEncoding="false" />

所以會是 utf-8 的編碼, 若是要開發 big5 的 asp.net 程式, 僅需要做這裡的調整即可. 程式碼本身並不需要更動, 就可以依照這個 web.config 做指定輸出了. 若是字元是 utf-8 的, 但指定用 big5 輸出時, 仍然會有 ?? 這種狀況發生, 也是要注意的地方, 不過一般的狀況下(字元相容的字)是沒有問題的.

但是頁面上的 meta tag 則必須 user 自行手動修改, 或利用小程式輔助來進行調整,

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

因為 web.config 是在 http header 就已經輸出指定的 encoding 囉, 而不是透過 meta tag 的 charset 指示的! 以下是 firefox 配合 Live HTTP headers 的 extension 抓出來的內容:

http://localhost:50201/WebSite2/Default.aspx

 

GET /WebSite2/Default.aspx HTTP/1.1
Host: localhost:50201
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: zh-tw,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Big5,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

HTTP/1.x 200 OK
Server: ASP.NET Development Server/8.0.0.0
Date: Tue, 22 Jul 2008 09:42:40 GMT
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 537
Connection: Close
———————————————————-

給大家參考看看囉!