C#-验证基于int的DateTime是否有例外?

ori*_*zil 2 c# validation datetime exception

这个问题讨论有关验证表示日期的字符串的问题,在该问题中人们提到最好避免将Exceptions用于常规流逻辑。而TryParse()对此非常有用。但是TryParse()需要一个字符串,就我而言,我已经将年月日作为整数。我想验证月/日/年组合。例如2月30日。

在新的DateTime(int,int,int)周围进行try / catch很容易,但是我想知道是否有一种不依赖异常的方法。

我也会觉得很愚蠢地将这些int组成一个字符串,然后使用TryParse()。

Mat*_*int 5

以下内容将DateTime使用多边公历检查在支持的范围内的有效年/月/日组合:

public bool IsValidDate(int year, int month, int day)
{
    return year >= 1 && year <= 9999
            && month >= 1 && month <= 12
            && day >= 1 && day <= DateTime.DaysInMonth(year, month);
}
Run Code Online (Sandbox Code Playgroud)

如果需要使用其他日历系统,请按如下所示进行扩展:

public bool IsValidDate(int year, int month, int day, Calendar cal)
{
    return year >= cal.GetYear(cal.MinSupportedDateTime)
            && year <= cal.GetYear(cal.MaxSupportedDateTime)
            && month >= 1 && month <= cal.GetMonthsInYear(year)
            && day >= 1 && day <= cal.GetDaysInMonth(year, month);
}
Run Code Online (Sandbox Code Playgroud)