0

私は彼らの記録にアクセスするためにGoogle Books APIにアクセスしています。問題は、発行日を文字列として持っていることです。文字列とは別に、有効な日時ではない6月12日、6月などのレコードがあります。以下の例の有効な日付の間の 2 つの日付の間のレコードを選択したいのですが、どうすればよいですか?

        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();

無効な日付を null として含める場合は、.Where条件を削除できます。

また13-june、 は現在の年であると見なされることに注意してください。

于 2013-10-08T02:32:56.933 に答える
0

フォーマットごとに個別の条件を記述する必要があります。基本的には、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();
于 2013-10-08T02:27:28.283 に答える