C# 如何在C中获取具有from dateTime字段的字符串#
我正在尝试从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 =
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类型。