我正在使用以下代码创建日期
try
{
newdatetime = new DateTime(2012, 2, 30);
break;
}
catch (ArgumentOutOfRangeException)
{
// Try 29 Feb if not 28.
}
捕获块是捕获无效日期,例如 2 月 30 日。有没有办法通过指定(年、月、日)等参数来验证日期是否有效?
好吧,几个月后您就知道有效范围,因此您可以手动限制它。年份显然不受通常意义上的限制,而是受到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
,这将为提供的字符串提供真/假 - 请注意文化敏感的解析。
您可以使用 DateTime.TryParse 执行检查:
DateTime d;
var isValid = DateTime.TryParse(String.Format("{0}/{1}/{2}", 2, 31, 2012), out d);
Console.WriteLine(isValid);