C# 如何在C中获取具有from dateTime字段的字符串#

C# 如何在C中获取具有from dateTime字段的字符串#,c#,visual-studio-2010,C#,Visual Studio 2010,我正在尝试从datetime字段获取子字符串。我从如下数据集获取此字段: fecha_nacimiento = row[7].ToString().Substring(1,9); 编译器没有说任何错误,但当我执行时,我得到以下错误: 开始索引不能超过字符串的长度 我重复第[7]行的值。ToString是11/11/2010 0:00:00在该行上放置一个断点,并为该值添加一个手表: row[7].ToString() 在我看来它是空的 此代码有助于捕获以下信息: string date =

我正在尝试从datetime字段获取子字符串。我从如下数据集获取此字段:

fecha_nacimiento = row[7].ToString().Substring(1,9);
编译器没有说任何错误,但当我执行时,我得到以下错误:

开始索引不能超过字符串的长度


我重复第[7]行的值。ToString是11/11/2010 0:00:00

在该行上放置一个断点,并为该值添加一个手表:

row[7].ToString()
在我看来它是空的

此代码有助于捕获以下信息:

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

正如注释所示,有更好的方法来解析日期

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

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

像这样:

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...
   }
}
fecha_nacimiento = ((DateTime)row[7]).ToShortDateString();

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

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

string test = string.Empty;

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

它会给您提供完全相同的错误消息。

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

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

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...
   }
}
fecha_nacimiento = ((DateTime)row[7]).ToShortDateString();
如果您只想使用
ToString
方法,则不需要进行编辑


否则,首先将其转换为DateTime,然后使用其中一种方法。

因为您已经证明字符串包含“22/11/2010 0:00:00”。使用

在这里:


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

尝试打印第[7]行。ToString()并查看您得到了什么您想要得到什么
DateTime.ToString()
提供了更好的格式化日期的方法。显然,第8行的长度为1或2less@Mikelon85你是在循环中这样做的,那么可能对于其中一行,
ToString()
会导致一个空字符串我的想法就是,V4Vendetta!Mikelon,在获得异常时执行此操作。您可以执行此操作,但当第[7]行为Null或空时也会失败。当然可以。但这是另一个问题。如果使用子字符串,则是相同的问题。在获取日期之前,可以检查该值是否为空。我编辑我的回答,只有在编译时知道
行[7]
是DateTime类型时,它才会起作用<代码>对象没有带格式参数的
.ToString()
重载。是的,我知道。但正如作者所提到的,如果单元格中的数据是DateTime,它会尝试从“DateTime”格式转换。如果它是一个碰巧包含该文本的字符串,它将再次导致“22/11/2010 0:00:00”。你是对的。我已经相应地编辑了我的答案。由于问题的标题,我假设对象确实是DateTime类型。