我收到错误,因为字符串未被识别为有效的DateTime

时间:2013-09-20 09:52:59

标签: c#

private string format = "dd/MM/yyyy HH:mm:ss";
DateTime fromdate = DateTime.ParseExact(GetFromScanDateTextBox.Text, format, CultureInfo.InvariantCulture);

执行此行字符串时,我收到错误,但未将其识别为有效日期时间。

我也尝试了这个,但它不起作用

DateTime fromdate = DateTime.ParseExact(GetFromScanDateTextBox.Text, format,null);

4 个答案:

答案 0 :(得分:3)

您的格式字符串必须为"d/M/yyyy",请查看this

基本上

MM :月份,从 01 到12。

,而

M :月份,从 1 到12。

同一天的部分。

答案 1 :(得分:2)

您告诉DateTime.ParseExact您希望使用格式为dd/MM/yyyy HH:mm:ss的字符串,但是您要为其提供格式为d/M/yyyy的字符串。

您需要将格式更改为d/M/yyyy

另外,我建议使用DateTime.TryParseExact验证字符串的有效性,而不是使用例外。

var okay = DateTime.TryParseExact(
               input, 
               new[] { "dd/MM/yyyy HH:mm:ss", "d/M/yyyy" }, 
               new CultureInfo("en-GB"), 
               DateTimeStyles.None, 
               out dateTime);

如果您的输入字符串可能会发生变化,TryParseExact允许您定义多种格式,如上所示,或者,如果它始终与您当前的文化相符,只需执行DateTime.TryParse和废除定义格式。

var okay = DateTime.TryParse(input, out dateTime);

答案 2 :(得分:-1)

如果您的格式始终为月/日/年,特别是在这种情况下(如果您的日期 2013年9月3日),您可以使用:

    string format = "MM/dd/yyyy";
    string dateTime = "9/3/2013";
    dateTime = (dateTime.Split('/')[0].Length == 1 ? "0" + dateTime.Split('/')[0] : dateTime.Split('/')[0]) + "/" + (dateTime.Split('/')[1].Length == 1 ? "0" + dateTime.Split('/')[1] : dateTime.Split('/')[1]) + "/" + dateTime.Split('/')[2];
    DateTime fromdate = DateTime.ParseExact(dateTime, format, CultureInfo.InvariantCulture);

答案 3 :(得分:-1)

请勿以格式部分

提供HH:MM:SS部分

string format =“dd / MM / yyyy”; DateTime fromdate = DateTime.ParseExact(test.Text,format,CultureInfo.InvariantCulture);