我使用以下代码创建日期
try
{
newdatetime = new DateTime(2012, 2, 30);
break;
}
catch (ArgumentOutOfRangeException)
{
// Try 29 Feb if not 28.
}
捕获块是为了捕获无效日期,如2月30日。有没有办法通过指定像(年,月,日)这样的参数来验证日期是否有效?
答案 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);