public static DateTime ToDate(string dt)
{
if (String.IsNullOrWhiteSpace(dt)) return new DateTime(1900, 1, 1);
DateTime dateValue;
if (DateTime.TryParse(dt, out dateValue))
{
if (dateValue.Year<1000)
{
dateValue= dateValue.AddYears(1911);
}
return dateValue;
} else
return new DateTime(1900, 1, 1);
}
這是我的一段西元轉民國的程式碼,原則上都可以使用
只是不知道為什麼好像超過10年,也就是99年開始往前選,
就會直接回傳return new DateTime(1900, 1, 1);
不知道是哪邊錯誤,還請各位幫我看一下,謝謝
if (DateTime.TryParse(dt, out dateValue))
這段他是依據電腦設定轉換成西元年月日 你給他的參數dt是民國
但你是在條件判斷結束才轉換完畢
public static DateTime ToDate(string dt)
{
if (String.IsNullOrWhiteSpace(dt)) return new DateTime(1900, 1, 1);
DateTime dateValue;
if(Datetime.TryParse((Convert.ToInt32(dt)+1911).Tostring()+"/01/01",out dateValue))
{
return dateValue;
}
else
{
return new Datetime(1900,1,1);
}
}
不如一開始傳進來的型態改成int
private void button2_Click(object sender, EventArgs e)
{
label1.Text = ToDate(Convert.ToInt32(string.IsNullOrEmpty(Year.Text) ? "0" : Year.Text)).ToString("yyyy/MM/dd");
}
public static DateTime ToDate(int dt)
{
//在呼叫的地方先判斷 民國年欄位沒輸入預設為帶0
if (dt == 0)
{ return new DateTime(1900, 1, 1); }
else
{
var test = (dt + 1911).ToString()+"/01/01";
var test2 = Convert.ToDateTime(test);
return test2;
}
}
已解決,感謝
我測試時傳入 "95/02/17 12:00:00" 它是回傳 DateTime形式的1995/2/17 下午 12:00:00
你這段Mehtod是不是想要做 不管傳入西元或民國時間 都會轉成西元的DateTime型式?
我覺得先處理年份再來轉DateTime會不會比較好?
public static DateTime ToDate(string dt)
{
if (String.IsNullOrWhiteSpace(dt)) return new DateTime(1900, 1, 1);
string[] array = dt.Split('-');
if(Convert.ToInt32(array[0]) < 1000)
array[0] = (Convert.ToInt32(array[0]) + 1911).ToString();
if (DateTime.TryParse(String.Join("-", array), out DateTime dateValue))
return dateValue;
else
return new DateTime(1900, 1, 1);
}
看你程式碼,應該是民國字串轉DateTime,附上我寫的
/// <summary>
/// 民國字串轉DateTime
/// </summary>
/// <param name="sValue"></param>
/// <returns></returns>
public static DateTime GetTwdate(string sValue, string sFormat)
{
int iADNum = 1911;
return DateTime.ParseExact((int.Parse(sValue.Substring(0, 3)) + iADNum) + sValue.Substring(3), sFormat, System.Globalization.CultureInfo.InvariantCulture);
}
//使用:
DateTime AAA=GetTwdate(dt,"yyyyMMdd");
//我公司民國時間格式都固定"yyyMMdd",所以函式內轉換成西元字串,是沒有問題的,但你得自己要整調一下。