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

本文关键字:有效 日期 时间 识别 应用程序 字符串 控制台 | 更新日期: 2023-09-27 18:32:02

我有一个 excel 工作表,其中正在以这种格式"23/8/11 01:33:01:PM"获取日期列并使用数据行将其插入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一起使用。如果您的字符串与当前区域性日期格式不匹配,您的代码将被破坏。这就是您收到此错误的原因。

请改用"dd/M/yy hh:mm:ss:tt"格式的DateTime.ParseExact

将日期和时间的指定字符串表示形式转换为其 日期时间等效。字符串表示形式的格式必须 完全匹配指定的格式,否则将引发异常。

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

这是一个演示

对于您的情况;

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");

我更改了日期和月份,并在末尾删除了冒号。但这是非常具体的。您需要了解有关通过的日期的更多信息才能做到这一点。