C# 使用验证创建有效的datetime对象
我正在使用以下代码创建日期C# 使用验证创建有效的datetime对象,c#,.net,datetime,C#,.net,Datetime,我正在使用以下代码创建日期 try { newdatetime = new DateTime(2012, 2, 30); break; } catch (ArgumentOutOfRangeException) { // Try 29 Feb if not 28. } catch块用于捕获无效日期,如2月30日。是否有任何方法通过指定参数(年、月、日)来验证该日期是否有效?好的,有了月,您就知道有效范围,因此可以手动约束该范围。年份显然不受正常意义上的限制,而
try
{
newdatetime = new DateTime(2012, 2, 30);
break;
}
catch (ArgumentOutOfRangeException)
{
// Try 29 Feb if not 28.
}
catch块用于捕获无效日期,如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;
}
public static bool arevaliddatevalue(整数年、整数月、整数天)
{
如果(月<1 | |月>12)
返回false;
如果(年份DateTime.MaxValue.year)
返回false;
var days=DateTime.DaysInMonth(年,月);
如果(天<1天>天)
返回false;
返回true;
}
或者,如果您对此不感兴趣,请将原始值转换为日期的字符串表示形式,并将其放入
DateTime.TryParse
,这将为提供的字符串提供一个真/假-只需小心进行区域性敏感解析。好吧,由于您知道有效范围,因此可以手动约束它。年份显然不受正常意义上的限制,而是受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;
}
public static bool arevaliddatevalue(整数年、整数月、整数天)
{
如果(月<1 | |月>12)
返回false;
如果(年份DateTime.MaxValue.year)
返回false;
var days=DateTime.DaysInMonth(年,月);
如果(天<1天>天)
返回false;
返回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执行检查:
DateTime d;
var isValid = DateTime.TryParse(String.Format("{0}/{1}/{2}", 2, 31, 2012), out d);
Console.WriteLine(isValid);
改用?@TimSchmelter Good spot,当我注意到我提供的示例与此非常相似时,我哈哈大笑——巧合!改用?@TimSchmelter Good spot,当我注意到我提供的示例与此非常相似时,我哈哈大笑——巧合!不过,根据语言环境的不同,该字符串格式可以进行不同的解释。根据,我建议您使用
TryParseExact()
,指定创建日期时间的格式。否则,如果区域设置预期月份和日期的顺序不同,您可能会得到一个ArgumentOutOfRangeException
。@Bridge:同意。将用替换字符更新帖子。不过,根据语言环境的不同,该字符串格式可能会有不同的解释。根据,我建议您使用TryParseExact()
,指定创建日期时间的格式。否则,如果区域设置预期月份和日期的顺序不同,您可能会得到一个ArgumentOutOfRangeException
。@Bridge:同意。将使用替代项更新帖子。。