我有一个 Excel 表,其中正在以这种格式获取日期列,"23/8/11 01:33:01:PM"
并使用 datarow 将其插入到 sql 2008 中,但出现错误
字符串未被识别为有效的日期时间。
有人可以帮忙吗?
DateTime newdate = Convert.ToDateTime(row[8].ToString());
这是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
with"dd/M/yy hh:mm:ss:tt"
格式。
将日期和时间的指定字符串表示形式转换为其等效的 DateTime。字符串表示的格式必须与指定的格式完全匹配,否则将引发异常。
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);
输出将是;
8/23/2011 1:33:01 PM
这里一个DEMO.
对于您的情况;
DateTime newdate = DateTime.ParseExact(row[8].ToString(), "dd/M/yy hh:mm:ss:tt", CultureInfo.InvariantCulture);
有关更多信息,请查看;
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);
这种方法使您的代码文化独立,这意味着日期将始终被正确解析(假设它采用指定的格式)。
这将起作用:
DateTime newdate = Convert.ToDateTime("8/23/11 01:33:01 PM");
我更改了日期和月份,并在末尾删除了冒号。但这是非常具体的。您需要了解更多关于通过的日期才能做到这一点。