Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用验证创建有效的datetime对象_C#_.net_Datetime - Fatal编程技术网

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:同意。将使用替代项更新帖子。。