未将C#字符串识别为有效的日期时间
我正在尝试解析CSV文件,并传入所需的字段 然而,无论我尝试了什么,我都会被告知“RegistrationDate”字段的“String未被识别为有效的DateTime” 我知道是这个字段,因为当我将这个字段设置为字符串,并将“DateOfBirth”保留为DateTime时,它运行得非常好 下面是有问题的字段类型和代码未将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
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;
}