以前轉成民國年 都常常會使用 .AddYears(-1911)
這種偷懶的做法,不過今天用2012/2/29寫範例的時候,轉出來 居然是101/2/28
根據我的推理,是因為西元101年 的2月 只有28 天
所以在此我把年份改成用減的,這樣 只減年份,月日不動,這樣就不會算錯了
用以下code示範
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string strdate = "2012/2/29";
            DateTime cdate = DateTime.Parse(strdate); 
            Console.WriteLine("西元年:"+cdate.ToString("yyyy/MM/dd"));
            Console.WriteLine("民國年:"+Convert.ToInt16(cdate.AddYears(-1911).Year) + cdate.ToString("/MM/dd"));
            cdate = cdate.AddYears(-1911);//用我你就會算錯
            Console.WriteLine("民國年:" + cdate.ToString("yyy/MM/dd"));//101/2/28
            Console.Read(); 
        } 
    }
}
其實根本不用算,透過 System.Globalization.TaiwanCalendar 類別就可以取得民國年了,範例如下:
<pre class="c" name="code">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string strdate = "2012/2/29";
            DateTime cdate = DateTime.Parse(strdate);
            TaiwanCalendar cal = new TaiwanCalendar();
            int twYear = cal.GetYear(cdate);
            Console.WriteLine(String.Format("民國年: {0}年{1}月{2}日",
                    twYear, cdate.Month, cdate.Day)); 
        }
    }
}
我知道可以用TaiwanCalendar,重點是 別用.AddYears(-1911)