我使用以下函数来确定输入字符串是否为有效日期。
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日”
答案 0 :(得分:3)
并且没有固定日期格式。输入也可能是“2012年2月19日”
一定有,否则就是胡说八道。如果您尚未定义系统的行为方式,则最好停止编码并花一点时间来定义它。
您可以使用TryParseExact方法,该方法允许您指定一种或多种要处理的格式。
答案 1 :(得分:2)
您可以添加一个简单的条件:
public static bool IsDate(string date)
{
DateTime Temp;
return(DateTime.TryParse(date, out Temp)&&date.Length>=10)
}
答案 2 :(得分:1)
您应该建立正确的日期格式列表,然后使用DateTime.TryParseExact
进行检查,如下所示:
string format = "yyyy-MM-dd";
DateTime dateTime;
if (DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture,
DateTimeStyles.None, out dateTime))
答案 3 :(得分:0)
您可以直接返回解析结果:
public static bool IsDate(string value)
{
DateTime date;
return DateTime.TryParse(value, out date);
}
它适用于您提供的格式(至少在当前文化“en-US”时)。
答案 4 :(得分:0)
要解决此问题,您应在应用程序中定义datetime-format
。
在你去的任何网页上,如果你看到一个汇编表格,你可能会看到一些日期字段,并且附近有类似的字样:
DD-MM-YYYY
,或MM/DD/YY
,或其他一些。
定义您的应用程序格式,使其成为用户的特征,并根据您的格式检查正确性。
只是一个假设的例子:
说用户插入日期并将其存储到DD-MM-YYYY
之类的字符串中,可能的选择之一可以简单地说:
if(dateTimeUserString.Split('-').Length < 3)
//not valid string !
我再说一遍,这只是一个例子,您应该为您的应用选择更合适的方式。
答案 5 :(得分:0)
使用DateTime.TryParse,您可以在此处指定格式。 http://msdn.microsoft.com/en-us/library/9h21f14e.aspx
答案 6 :(得分:0)
DateTime.TryParse确实有一个overload,它使IFormatProvider允许指定自定义格式。您可能需要定义多个IFormatPrividers来检查您可能期望的各种字符串。
此外,您还可以通过
来缩短代码,而不是使用if / elsereturn DateTime.TryParse(date, out Temp);
答案 7 :(得分:0)
您的代码运行得很好并检查给定的日期字符串是否可以是使用所有当前文化日期格式的有效日期,包括此19-Feb-2012
或1997-09
你的甚至是19 february
。
这使您可以灵活地输入日期。
但如果灵活性不符合您的要求,请尝试使用TryParseExact
解析一种或多种特定格式。