Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未将C#字符串识别为有效的日期时间_C#_Csv_Datetime - Fatal编程技术网

未将C#字符串识别为有效的日期时间

未将C#字符串识别为有效的日期时间,c#,csv,datetime,C#,Csv,Datetime,我正在尝试解析CSV文件,并传入所需的字段 然而,无论我尝试了什么,我都会被告知“RegistrationDate”字段的“String未被识别为有效的DateTime” 我知道是这个字段,因为当我将这个字段设置为字符串,并将“DateOfBirth”保留为DateTime时,它运行得非常好 下面是有问题的字段类型和代码 public string CustomerId { get; set; } public string Forename { get; set; } public stri

我正在尝试解析CSV文件,并传入所需的字段

然而,无论我尝试了什么,我都会被告知“RegistrationDate”字段的“String未被识别为有效的DateTime”

我知道是这个字段,因为当我将这个字段设置为字符串,并将“DateOfBirth”保留为DateTime时,它运行得非常好

下面是有问题的字段类型和代码

public string CustomerId { get; set; } 
public string Forename { get; set; }
public string Surname { get; set; }
public DateTime? DateOfBirth { get; set; }
public string VehicleId { get; set; }
public string RegistrationNumber { get; set; }
public string Manufacturer { get; set; }
public string Model { get; set; }
public string EngineSize { get; set; }
public DateTime? RegistrationDate { get; set; }
public string InteriorColour { get; set; }
public string HasHelmet { get; set; }
public string VehicleType { get; set; }

公共静态IEnumerable CsvParser()
{
使用(TextFieldParser parser=新的TextFieldParser(csv_文件_路径))
{
SetDelimiters(新字符串[]{“,”});
parser.HasFieldsEnclosedInQuotes=false;
parser.ReadLine();
而(!parser.EndOfData)
{
string[]fields=parser.ReadFields();
收益率返回新卡数据()
{
CustomerId=字段[0],
名称=字段[1],
姓氏=字段[2],
DateOfBirth=DateTime.Parse(字段[3]),
VehicleId=字段[4],
注册号=字段[5],
制造商=字段[6],
模型=字段[7],
EngineSize=字段[8],
RegistrationDate=DateTime.ParseExact(字段[9],“yyyy-MM-dd”,CultureInfo.InvariantCulture),
内饰颜色=字段[10],
HasHelmet=字段[11],
VehicleType=字段[12]
};
}
}
}
现在我一直在尝试。但是它仍然抛出错误。。有什么想法吗

编辑:我试图解析的字符串示例是“2007-02-28”


关于潜在的重复问题,我相信我已经在上面的代码中尝试过该解决方案。

在尝试解析之前,请检查字段中是否有null或空值

更改构造函数的此行:

RegistrationDate = DateTime.ParseExact(fields[9], "yyyy-MM-dd", CultureInfo.InvariantCulture),
为此:

RegistrationDate = string.IsNullOrWhiteSpace(fields[9]) ? null : DateTime.ParseExact(fields[9].Trim(), "yyyy-MM-dd", CultureInfo.InvariantCulture),

确保
RegistrationDate
字段的后续逻辑帐户可能为
null

您正在解析CSV中的空值。

在处理CSV文件时,有时您可能不希望该值存在

private DateTime ParseDateTimeField(string date)
{
    //If our string is not null
    if (!string.IsNullOrWhiteSpace(date))
        return DateTime.ParseExact(date, "yyyy-MM-dd", CultureInfo.InvariantCulture);
    else
        //Do something like return a specific date or maybe today.
        //return DateTime.Today;
}
在代码中:

 RegistrationDate = ParseDateTimeField(fields[9]);

Sven
的函数可用于处理单元格中任何可能的错误信息,这些单元格应包含有效的日期/时间值:

private DateTime? ParseDateTimeField(string date)
{
    DateTime value;
    if (!DateTime.TryParseExact(dateString, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out value))
        return null; 
    return value;
}

这将使您的代码更加健壮,因为它不会因不只是空单元格的无效值而崩溃。

您试图解析的字符串是什么?简单的答案是,它不是一个有效的日期时间格式,但我们不能确定,除非你告诉我们它是什么is@Dave字符串是“2007-02-28”@BethanyJayneEvans在您的问题中发布示例,而不是在comment@BethanyJayneEvans使用调试器并在该行上放置断点,检查该字段(字段[9])实际具有您期望的值。请阅读关于发布代码的指导。您在注释中添加的字符串可以通过显示的代码进行完美解析-请删除或使用真正的最小代码(一行)发布,包括在问题中内联显示问题所需的数据。已排序!非常感谢:)
private DateTime? ParseDateTimeField(string date)
{
    DateTime value;
    if (!DateTime.TryParseExact(dateString, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out value))
        return null; 
    return value;
}