iT邦幫忙

DAY 17
0

C#技術分享系列 第 17

C#技術分享17-西元年轉民國年 別用.AddYears(-1911)

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

上一篇
C#技術分享16-取得月初及月底的日期
下一篇
C#技術分享18-[C#]使用可為 Null 的型別
系列文
C#技術分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
huangsb
iT邦好手 1 級 ‧ 2012-10-11 22:27:05

其實根本不用算,透過 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)); 
        }
    }
}
thc iT邦研究生 5 級 ‧ 2012-10-12 16:53:39 檢舉

我知道可以用TaiwanCalendar,重點是 別用.AddYears(-1911)

我要留言

立即登入留言