linq 字符串日期时间、字符串之间和字符串格式异常错误

本文关键字:字符串 格式 异常 错误 日期 时间 linq 之间 | 更新日期: 2023-09-27 18:34:23

我正在访问Google Books API以访问他们的记录。 问题是他们的发布日期是字符串。除了字符串之外,它们还有 12-6 月、6 月等无效日期时间的记录。现在,我想在下面的示例中选择有效日期之间的两个日期之间的记录。我该怎么做?

        List<datetest> datetest = new List<datetest>();
        datetest.Add(new datetest { stringdate = "13-june" });
        datetest.Add(new datetest { stringdate = "June" });
        datetest.Add(new datetest { stringdate = "2010-09-11" });
        datetest.Add(new datetest { stringdate = "2010-09-10" });
        datetest.Add(new datetest { stringdate = "2014-09-09" });

我已经尝试过 date.parse 和 parseexact 它不适用于该格式。 我不确定tryparse。 如何使其在 LINQ 查询中工作。 还有其他事情吗?

linq 字符串日期时间、字符串之间和字符串格式异常错误

基于

这个答案 如何在 xml 数据的 linq 查询中使用 TryParse?

Func<string, DateTime?> tryToGetDate = value =>
{
    DateTime dateValue;
    return DateTime.TryParse(value, out dateValue)
        ? (DateTime?) dateValue
        : null;
};
var dates = (
    from c in datetest
    where tryToGetDate(c.stringdate) != null
    select c
).ToList();

这将为您提供所有有效日期:

var dates = datetest.Select(x =>
    {
        DateTime date;
        if (DateTime.TryParse(x.stringdate, out date))
            return date;
        return (DateTime?)null;
    }).Where(x => x.HasValue).ToList();

如果要将无效日期作为空值包含,可以删除.Where条件。

另请注意,13-june将假定为当前年份。

您必须为每种格式编写单独的条件。基本上,尝试 DateTime.Parse 它,如果失败,请尝试针对您可能必须分析的每种可能格式对其进行评估。

如果只想将无效日期替换为 null,请对每个值执行以下操作:

DateTime Out = null;
DateTime.TryParse("YourString",out Out);

例如,如果你有一个字符串数组(称为数组):

DateTime?[] Result = Array.Select(x => 
{
    DateTime Out = null;
    DateTime.TryParse("YourString",out Out);
    return Out;
}).ToArray();