检查 C# 中的有效日期是否无法正常工作

本文关键字:常工作 工作 有效日期 是否 检查 | 更新日期: 2023-09-27 18:31:33

我使用以下函数来确定输入字符串是否为有效日期。

public static bool IsDate(string date)
        {
            DateTime Temp;
            if (DateTime.TryParse(date, out Temp))
                return true;
            else
                return false;
        }

问题是当我输入"1997-09"时,它返回 true。我希望它检查完整的日期,例如"1997-08-12"

不,没有固定日期格式。输入也可能是"2012 年 2 月 19 日"

检查 C# 中的有效日期是否无法正常工作

不,没有固定日期格式。输入也可能是"2012 年 2 月 19 日"

必须有,否则是无稽之谈。如果你还没有定义你的系统必须如何运行,你最好停止编码,花点时间定义它。

您可以使用 TryParseExact 方法,该方法允许您指定一种或多种要处理的格式。

您可以

添加一个简单的条件:

    public static bool IsDate(string date)
    {
        DateTime Temp;
        return(DateTime.TryParse(date, out Temp)&&date.Length>=10)
    }
您应该

建立正确的日期格式列表,然后与DateTime.TryParseExact一起检查,如下所示:

string format = "yyyy-MM-dd";
DateTime dateTime;
if (DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture,
    DateTimeStyles.None, out dateTime))

使用DateTime.TryParse,您可以指定格式,更多内容请点击此处。 http://msdn.microsoft.com/en-us/library/9h21f14e.aspx

若要解决此问题,应在应用程序中定义一个datetime-format

在你

去的任何网页上,如果你看到一个编译表单,你大概也会看到一些日期字段,在它附近像这样:

DD-MM-YYYY,或MM/DD/YY,或其他什么。

为您的应用程序格式定义,使其适合用户,并根据您的格式检查正确性。

只是一个假设的例子:

假设用户插入了一个日期,然后像DD-MM-YYYY一样将其存储到字符串中,其中一个可能的选择可以简单地说:

if(dateTimeUserString.Split('-').Length < 3)
    //not valid string !

我再说一遍,这只是您应该为您的应用程序选择更合适的方式的示例。

DateTime.TryParse 确实有一个重载,它需要一个 IFormatProvider 来允许自定义格式的规范。 您可能需要定义多个 IFormatPrivider 来检查您可能期望有效的各种字符串。

此外,除了 if/else,您还可以通过以下方式缩短代码

return DateTime.TryParse(date, out Temp);

可以直接返回解析结果:

public static bool IsDate(string value)
{
    DateTime date;
    return DateTime.TryParse(value, out date);
}

它适用于您提供的格式(至少当当前区域性"en-US"时)。

您的代码将运行良好,并使用当前区域性的所有日期格式(包括您的19-Feb-20121997-09甚至19 february)检查给定的日期字符串是否为有效日期。

这使您可以灵活地输入日期。

但是,如果灵活性不是您想要的,请尝试使用 TryParseExact 解析一种或多种特定格式。