以前轉成民國年 都常常會使用 .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)