【问题标题】:Is there a way to Parse String to DateTime, when the string comes with different formats [duplicate]当字符串具有不同格式时,有没有办法将字符串解析为日期时间[重复]
【发布时间】:2017-10-05 23:17:24
【问题描述】:

我正在构建一个控制台应用程序,它读取 .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 更加动态地处理带秒或不带秒的日期格式? 谢谢

【问题讨论】:

  • ParseExact 的第二个参数(格式)也可以是格式数组

标签: c# asp.net csv


【解决方案1】:

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

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

【讨论】:

  • 它会按顺序应用它们,还是会选择最佳匹配?
  • @johnG:第一场比赛获胜,所以我会先使用默认格式,最好避免使用MM/dd + dd/MM 之类的格式,否则您可能不会得到任何例外,而是错误的DateTime。如果你想看source
【解决方案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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多