[C#] 時間轉換,民國與西元的轉換。

  • 10991
  • 0
  • C#
  • 2015-12-22

DateTime.ParseExact(),時間轉換,民國與西元的轉換。

但是最近使用者在換了一份新表格以後突然說:我們輸入生日的時候,遇到使用者輸入的是民國的生日,這樣每次在輸入時,我們都要自己換算,不小心還會算錯,可不可以改成輸入民國生日就好?

但是系統的運算都是以西元年為主,使用者的需求又不能不重視,因為新表格已經印了,且表格上的日期格式是民國年(沒參與到實際文件表格的設計,這部分跟系統原先的架構脫鉤了。)

所以只好在使用者輸入後將民國年轉換成西元年後儲存!!!當使用者查詢頁面時,在將西元年轉換回去民國年。

初期一開始沒有想太多,就直接將民國年轉成西元,因此比照西元格式yyyyMMdd(不要有分隔符號),要求輸入年月日,乍看之下沒有甚麼問題。

等測試時,才發現完全不行。

691010

6442

1011121

才發現,這要怎麼調整啊???

不管怎麼轉換,都會出現 ”字串未被辨認為有效的 DateTime。”

只好利用限定格式來處理,要求輸入一律採用輸入採用 yyyMMdd模式。轉為時間格式或是字串。

string x = "1011121";
DateTime dt = DateTime.ParseExact(x, "yyyMMdd", CultureInfo.InvariantCulture).AddYears(1911);

string x1 = "0640402";
DateTime dt1 = DateTime.ParseExact(x, "yyyMMdd", CultureInfo.InvariantCulture).AddYears(1911);

或是利用擴充方法也可以。

//擴充方法 
   public static string ToSimpleUSDate(this  DateTime dtx)
    {
        return string.Format("{0}{1}{2}", (Int32.Parse(dtx.Year.ToString())+1911), dtx.Month, dtx.Day);
    }

//執行  
string x = "1041021";
DateTime dt = DateTime.ParseExact(x, "yyyMMdd", CultureInfo.InvariantCulture);
string aa =  dt.ToSimpleUSDate();

參考來源:感謝前輩們的說明與文件範例,非常謝謝!!!

mrkt 的程式學習筆記 基本題 - C# 西元年轉換取得民國年格式字串

demo小舖 擴充 DateTime 轉換顯示民國年

瓶水相逢 - 艾小克 威力強大的DateTime.ParseExact()

黑暗執行緒 TIPS-.NET DateTime Formating

 

水滴可成涓流,涓流可成湖泊大海。
汲取累積知識,將知識堆積成常識;將常識探究成學識;將學識簡化為知識;授人自省。