1

我正在使用以下代码创建日期

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

捕获块是捕获无效日期,例如 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,这将为提供的字符串提供真/假 - 请注意文化敏感的解析。

于 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 回答