我使用創建日期下面的代碼與驗證
try
{
newdatetime = new DateTime(2012, 2, 30);
break;
}
catch (ArgumentOutOfRangeException)
{
// Try 29 Feb if not 28.
}
catch塊是捕捉無效的日期像2月30日創建有效的datetime對象有沒有什麼辦法來驗證,如果日期是speciying有效參數(如年,月,日)?
我使用創建日期下面的代碼與驗證
try
{
newdatetime = new DateTime(2012, 2, 30);
break;
}
catch (ArgumentOutOfRangeException)
{
// Try 29 Feb if not 28.
}
catch塊是捕捉無效的日期像2月30日創建有效的datetime對象有沒有什麼辦法來驗證,如果日期是speciying有效參數(如年,月,日)?
那麼,有幾個月你知道有效範圍,所以你可以手動約束。在正常意義上,年限顯然不受限制,但受限於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);
使用[DateTime.TryParse()](http://msdn.microsoft.com/en-us/library/system.datetime。 tryparse.aspx)而不是? – Bridge
[Wanted:DateTime.TryNew(year,month,day)或DateTime.IsValidDate(year,month,day)]可能的重複](http://stackoverflow.com/questions/9467967/wanted-datetime-trynewyear-month- day-or-datetime-isvaliddateyear-month-d) –
@TimSchmelter當我注意到我提供的示例與此非常相似時,我認爲這很好 - 我巧合! –