1

次のコードを使用して日付を作成しています

 try
 {
    newdatetime = new DateTime(2012, 2, 30);
    break;
 }
 catch (ArgumentOutOfRangeException)
 {
   // Try 29 Feb if not 28.
 }

catch ブロックは、2 月 30 日のような無効な日付をキャッチすることです。(年、月、日) のようなパラメーターを指定して、日付が有効かどうかを確認する方法はありますか?

4

2 に答える 2

9

まあ、月で有効な範囲を知っているので、手動で制限することができます。年は明らかに通常の意味では制約されませんが、代わりDateTimeに実際に保持できる量 (0001 から 9999) によって制限されます。

日数には、DaysInMonth(int year, int month)指定した月の最大日数を教えてくれる方法があります。これで閏年もわかります。

この情報を使用して、提供された整数に基づいて範囲をチェックする独自のメソッドを作成できます。

何かのようなもの:

public static bool AreValidDateValues(int year, int month, int day)
{
    if (month < 1 || month > 12)
        return false;

    if (year < DateTime.MinValue.Year || year > DateTime.MaxValue.Year)
        return false;

    var days = DateTime.DaysInMonth(year, month);

    if (day < 1 || day > days)
        return false;

    return true;
}

または、それが気にならない場合は、生の値を日付の文字列表現に変換しDateTime.TryParse、それを に入れます。これにより、提供された文字列の true/false が得られます。カルチャに依存した解析には注意してください。

于 2012-07-02T12:55:49.640 に答える
1

DateTime.TryParse を使用してチェックを実行できます。

DateTime d;
var isValid = DateTime.TryParse(String.Format("{0}/{1}/{2}", 2, 31, 2012), out d);
Console.WriteLine(isValid);
于 2012-07-02T12:57:21.260 に答える