我正在访问谷歌图书api访问他们的记录。问题是,它们将发布日期作为字符串。除了字符串,他们有记录为12-6月,6月等,这是无效的日期时间。现在,我想在下面的示例中,在有效的dates.how之间选择两个日期之间的记录,我可以这样做吗?
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和parse精确,这是不工作的格式。我不确定试着分析一下。如何使它在linq查询中工作。还有别的事吗?
发布于 2013-10-08 02:32:08
基于这个答案How to I use TryParse in a linq query of xml data?
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-08 02:32:56
这将为您提供所有有效日期:
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-08 02:27:28
您必须为每种格式编写单独的条件。基本上,尝试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();https://stackoverflow.com/questions/19237964
复制相似问题