如何从C#中的dateTime字段获取String

时间:2013-05-22 12:07:25

标签: c# visual-studio-2010

我试图从datetime字段获取SubString。我从这样的数据集中得到这个字段:

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

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

  

start index不能超过string的长度。

我重复一遍,行[7] .ToString的值是11/11/2010 0:00:00

5 个答案:

答案 0 :(得分:2)

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

row[7].ToString()

在我看来它是空的。

此代码有助于理解这一点:

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

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

答案 1 :(得分:1)

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

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

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

编辑如果您只想使用ToString方法,则无需进行投射。

否则,首先parse到DateTime,然后使用这些方法。

答案 2 :(得分: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类型时才有效。有关更多详细信息,请参阅上面的答案。

答案 3 :(得分: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...
   }
}

答案 4 :(得分:0)

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

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

string test = string.Empty;

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

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