您可以使用這些值來嘗試構建一個有效DateTime
,再搭上發生的ArgumentOutOfRangeException
如果參數超出範圍:
public void setBirthdate(int year, int month, int day)
{
try
{
Birthdate = new DateTime(year, month, day);
}
catch (ArgumentOutOfRangeException)
{
Birthdate = DateTime.Today;
}
}
有些人可能會不同意使用這樣的例外,但我只是l在類DateTime
做自己的檢查,而不是自己重新創建它們。
從documentation,一個ArgumentOutOfRangeException
如果發生:
- 年份大於9999小於1或,或
- 月是大於12小於1或更大,或
- 日是少超過1個或大於月份的天數。
或者,你可以從DateTime
類複製邏輯:(reference)
public void setBirthdate(int year, int month, int day)
{
if (year >= 1 && year <= 9999 && month >= 1 && month <= 12)
{
int[] days = DateTime.IsLeapYear(year)
? new[] { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365}
: new[] { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366};
if (day >= 1 && day <= days[month] - days[month - 1])
Birthdate = new DateTime(year, month, day);
}
else
Birthdate = DateTime.Today;
}
查看'TryParseExact'方法。 – 2014-12-27 18:48:43
DateTime.TryParse – 2014-12-27 18:48:57
使用'try {Birthdate = new DateTime(year,month,day); } catch {Birthdate = DateTime.Today;}' – Avijit 2014-12-27 18:51:37