[英]Getting error “String was not recognized as a valid DateTime.”
我收到錯誤在將字符串轉換為日期時間格式時,字符串未被識別為有效的DateTime。 我試圖將“25-11-2013 06:25:33 PM”轉換為日期格式。 任何人都可以幫我解決這個問題。
protected void text_changed(object sender, EventArgs e)
{
if (frm.Text == "")
{
Label1.Visible = true;
Label1.Text = "You can leave from textbox blank";
return;
}
string dt = TextBox1.Text;
string amt = dt.ToString();
string ams = amt.ToString() + " " + frm.Text;
DateTime dts = DateTime.ParseExact(ams, "MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture);
string ams1 = amt.ToString() + "" + TextBox2.Text;
DateTime dts1 = DateTime.ParseExact(ams1, "MM/dd/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture);
TimeSpan dur = DateTime.Parse(dts1.ToString()).Subtract(DateTime.Parse(dts.ToString()));
double res = 0.0;
res = dur.TotalHours * 20;
TextBox3.Text = res.ToString();
}
如果用戶輸入的是“25-11-2013 06:25:33 PM”,那么您的格式字符串必須是:
string dateFormat = "dd-MM-yyyy hh:mm:ss tt";
代碼“MM / dd / yyyy hh:mm:ss tt”中的格式字符串要求用戶輸入日期為“11/25/2013 06:25:33 PM”。 此處描述了所有自定義DateTime格式字符串選項: http : //msdn.microsoft.com/en-us/library/8kb3ddd4(v = vs.110).aspx
如果允許用戶只輸入自由格式字符串,則解決日期時會遇到問題。 您最好的選擇是添加日歷控件或其他一些構造用戶輸入的方法,這樣您就不必解析自由格式的字符串。
使用Convert.ToDateTime可以省去設置預期格式的麻煩,因為它最好找到適合的日期格式。 另一方面,如果用戶輸入的日期可以通過多種方式解析,您可能無法獲得預期...
string dts = "09/10/11 06:25";
DateTime dt = System.Convert.ToDateTime(dts);
在我的瑞典系統上,它轉換為2009-10-11,yy / mm / dd,但使用美國背景,預期日期是2011-09-10,mm / dd / yy。
如果您可以讓用戶指示或選擇他們的文化,那么從自由格式解析日期/時間會更容易 - 因為用戶更有可能輸入文化上正確的字符串。
//this is parsing the datetime using Swedish format
string theCulture = "sv-SE";
string localDts = "2013-11-25 06:25";
DateTime localDt = DateTime.Parse(localDts, System.Globalization.CultureInfo.CreateSpecificCulture(theCulture));
如果不可能,您應該考慮用戶在系統中輸入日期和時間的不同方式,並將它們添加到支持的字符串數組中。 您可能需要添加不同字符串的負載,因為每個格式字符串都會解析一個確切的格式,用戶可能會將月,日,小時等輸入為單個數字或省略秒部分。 這是一個解析一堆不同格式的例子,這絕不是對所有備選方案的全面覆蓋......
//A few different strings to test
string dts1 = "25-11-2013 6:25:33";
string dts2 = "11/25/2013 6:25:33";
string dts3 = "25-11-2013 06:25:33";
string dts4 = "11/25/2013 06:25:33";
string dts5 = "25-11-2013 6:25:33 PM";
string dts6 = "11/25/2013 6:25:33 PM";
string dts7 = "25-11-2013 06:25:33 PM";
string dts8 = "11/25/2013 06:25:33 PM";
string dts9 = "25-11-2013 6:5:33 PM";
string dts10 = "11/25/2013 6:5:33 PM";
//The supported datetime formats as an array
string[] dateFormats = {
"dd-MM-yyyy hh:mm:ss tt",
"dd-MM-yyyy h:mm:ss tt",
"dd-MM-yyyy h:m:ss tt",
"dd-MM-yyyy HH:mm:ss",
"dd-MM-yyyy H:mm:ss",
"dd-MM-yyyy H:m:ss",
"MM/dd/yyyy hh:mm:ss tt",
"MM/dd/yyyy h:mm:ss tt",
"MM/dd/yyyy h:m:ss tt",
"MM/dd/yyyy HH:mm:ss",
"MM/dd/yyyy H:mm:ss",
"MM/dd/yyyy H:m:ss"
};
//Parse all the sample strings
DateTime dt1 = DateTime.ParseExact(dts1, dateFormats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
DateTime dt2 = DateTime.ParseExact(dts2, dateFormats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
DateTime dt3 = DateTime.ParseExact(dts3, dateFormats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
DateTime dt4 = DateTime.ParseExact(dts4, dateFormats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
DateTime dt5 = DateTime.ParseExact(dts5, dateFormats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
DateTime dt6 = DateTime.ParseExact(dts6, dateFormats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
DateTime dt7 = DateTime.ParseExact(dts7, dateFormats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
DateTime dt8 = DateTime.ParseExact(dts8, dateFormats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
DateTime dt9 = DateTime.ParseExact(dts9, dateFormats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
DateTime dt10 = DateTime.ParseExact(dts10, dateFormats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.