簡體   English   中英

獲取錯誤“字符串未被識別為有效的DateTime”。

[英]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。

如果可以,請使用CultureInfo

如果您可以讓用戶指示或選擇他們的文化,那么從自由格式解析日期/時間會更容易 - 因為用戶更有可能輸入文化上正確的字符串。

 //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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM