0

我正在访问谷歌图书 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 查询中工作。还有什么其他的吗?

4

3 回答 3

4

基于这个答案 如何在 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();
于 2013-10-08T02:32:08.720 回答
1

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

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将假定具有当前年份。

于 2013-10-08T02:32:56.933 回答
0

您将不得不为每种格式编写单独的条件。基本上,尝试 DateTime.Parse 它,如果它失败,尝试为您可能必须解析的每种可能格式评估它。

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

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

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

DateTime?[] Result = Array.Select(x => 
{
    DateTime Out = null;
    DateTime.TryParse("YourString",out Out);
    return Out;
}).ToArray();
于 2013-10-08T02:27:28.283 回答