-2

我正在尝试从日期时间字段中获取子字符串。我从这样的数据集中得到这个字段:

fecha_nacimiento = row[7].ToString().Substring(1,9);

编译器没有说任何错误但是当我执行时我得到以下错误:

起始索引不能长于字符串的长度。

我再说一遍 row[7].ToString 的值是 11/11/2010 0:00:00

4

5 回答 5

2

在该行上放置一个断点并为此值添加一个监视:

row[7].ToString()

在我看来,它是空的。

这段代码将有助于捕捉到这一点:

string date = row[7].ToString();
if (!String.IsNullOrEmpty(date) && date.Length > 8)
{
    fecha_nacimiento = date.Substring(1,9);
}

正如评论所示,有更好的方法来解析日期!

于 2013-05-22T12:09:44.277 回答
1

正如您已经证明该字符串包含“22/11/2010 0:00:00”。利用

row[7].ToString("d") which will result in "22/11/2010"

这里: http: //msdn.microsoft.com/de-de/library/zdtaw1bw (v=vs.80).aspx

[编辑] Renan 当然是正确的,他说这仅在数据源中包含的对象为 DateTime 类型时才有效。有关更多详细信息,请参见上面的答案。

于 2013-05-22T12:18:15.717 回答
1

首先,该错误意味着您有一个空字符串或一个字符长的字符串 - 它在位置 1 处没有字符(请记住,它们从索引 0 开始)。

其次,如果该单元格中的数据已经是 DateTime,则使用DateTime方法之一来获取您需要的字符串 (ToStringToShortDateString) ToLongDateString。像这样:

fecha_nacimiento = ((DateTime)row[7]).ToShortDateString();

如果您只想使用该ToString方法,则不需要EDIT Casting。

否则,首先将其解析为 DateTime,然后使用其中一个方法。

于 2013-05-22T12:13:08.537 回答
0

您可以尝试在方法“tostring()”中使用模式

您可以从许多现有格式中进行选择。在此处观看官方文档

http://msdn.microsoft.com/en-us/library/zdtaw1bw(v=vs.80).aspx

像这样:

string fecha_nacimiento = string.Empty;

if(row[7] != null)
{
   if(row[7].toString() != string.Empty)
   {
       string fecha_nacimiento = row[7].ToString("yyyy-MM-dd hh:mm");
       //OR
       string fecha_nacimiento = row[7].ToString("yyyy-MM-dd");
       // etc...
   }
}
于 2013-05-22T12:11:45.230 回答
0

这意味着它row[7].ToString()的长度为 0。

只是为了证明一点,如果你这样做:

string test = string.Empty;

Console.WriteLine(test.Substring(1, 9));

它会给你完全相同的错误信息。

于 2013-05-22T12:12:11.270 回答