控制台应用程序字符串未被识别为有效的日期时间

时间:2013-09-19 11:52:54

标签: c# .net string datetime

我有一张excel表,其中采用了这种格式的日期列"23/8/11 01:33:01:PM" 并使用datarow将其插入sql 2008但是收到错误

  

字符串未被识别为有效的日期时间。

任何人都可以帮忙吗?

DateTime newdate = Convert.ToDateTime(row[8].ToString());

3 个答案:

答案 0 :(得分:7)

这里反编译时Convert.ToDateTime方法的样子如何;

public static DateTime ToDateTime(string value)
{
  if (value == null)
    return new DateTime(0L);
  else
    return DateTime.Parse(value, (IFormatProvider) CultureInfo.CurrentCulture);
}

如您所见,此方法使用DateTime.Parse方法和CurrentCulture。如果您的字符串与您当前的文化日期格式不匹配,您的代码将被破坏。这就是你得到这个错误的原因。

改为使用DateTime.ParseExact格式的DEMO

  

将指定的日期和时间字符串表示形式转换为它   DateTime等效。字符串表示的格式必须   完全匹配指定的格式或抛出异常。

"dd/M/yy hh:mm:ss:tt"

输出将是;

string s = "23/8/11 01:33:01:PM";
DateTime newdate = DateTime.ParseExact(s, "dd/M/yy hh:mm:ss:tt", CultureInfo.InvariantCulture);
Console.WriteLine(newdate);

这里有 Custom Date and Time Format Strings

对于你的情况;

8/23/2011 1:33:01 PM

有关更多信息,请查看;

  • {{3}}

答案 1 :(得分:2)

Convert.ToDateTime内部调用DateTime.Parse,默认情况下会使用您应用程序的当前文化。如果23/8/11 01:33:01:PM不是此文化的有效格式,则此方法将失败。

对于特定的日期格式,最好使用DateTime.ParseExact例如

DateTime.ParseExact("23/8/11 01:33:01:PM", "dd/M/yy hh:mm:ss:tt", CultureInfo.InvariantCulture);

此方法使您的代码独立于文化,这意味着将始终正确解析日期(假设它采用指定的格式)。

答案 2 :(得分:0)

这将有效:

DateTime newdate = Convert.ToDateTime("8/23/11 01:33:01 PM");

我改变了日期和月份,结束了结肠。但这非常具体。您需要了解更多关于这样做的日期。