使用验证创建有效的datetime对象

时间:2012-07-02 12:51:07

标签: c# .net datetime

我使用以下代码创建日期

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

捕获块是为了捕获无效日期,如2月30日。有没有办法通过指定像(年,月,日)这样的参数来验证日期是否有效?

2 个答案:

答案 0 :(得分:6)

好吧,几个月你知道有效范围,所以你可以手动限制它。显然,年份在正常意义上并不受限制,而是受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 - 只需要小心对文化敏感的解析。

答案 1 :(得分:1)

您可以使用DateTime.TryParse执行检查:

DateTime d;
var isValid = DateTime.TryParse(String.Format("{0}/{1}/{2}", 2, 31, 2012), out d);
Console.WriteLine(isValid);