检查 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 日"
不,没有固定日期格式。输入也可能是"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-2012
或1997-09
甚至19 february
)检查给定的日期字符串是否为有效日期。
这使您可以灵活地输入日期。
但是,如果灵活性不是您想要的,请尝试使用 TryParseExact
解析一种或多种特定格式。