当字符串带有不同的格式时,有没有办法将字符串解析为DateTime

时间:2017-10-05 15:12:44

标签: c# asp.net csv

我正在构建一个读取.csv文件并将值添加到数据库的控制台应用程序。现在我有一些CSV列存储日期时间值。 但是这些列有时包含数秒时间,而有时却没有。以下是日期字段的一些数据示例: -

03/30/2016 10:55:49
04/01/2016 11:02

现在当我尝试将上面的字符串解析为日期时间时,如下所示: -

formattedDateCreated = DateTime.ParseExact(fields[DateCreatedIndex], "MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture);

当我尝试解析第二个日期时,我将得到以下异常: -

String was not recognized as a valid DateTime

所以有人可以就此提出建议吗?我如何使我的Parse更加动态,可以使用秒或没有秒来处理日期格式? 感谢

2 个答案:

答案 0 :(得分:3)

您可以使用支持多种格式的重载:

string[] formats = {"MM/dd/yyyy HH:mm:ss", "MM/dd/yyyy HH:mm" };
DateTime formattedDateCreated = DateTime.ParseExact(fields[DateCreatedIndex], formats, CultureInfo.InvariantCulture, DateTimeStyles.None);

答案 1 :(得分:2)

DateTime.ParseExact也可以采用多种格式:

var formats = new []
{
    "MM/dd/yyyy HH:mm:ss",
    "MM/dd/yyyy HH:mm"
};
var dates = "03/30/2016 10:55:49;04/01/2016 11:02".Split(';')
    .Select(x => DateTime.ParseExact(x, formats, CultureInfo.InvariantCulture, DateTimeStyles.None));