繁体   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