使用DateTime.TryParse检查字符串是否为有效日期我正在使用DateTime.TryParse()函数检查特定字符串是否为有效的日期时间,独立于任何文化。令我惊讶的是,该函数对“1-1”、“1/1”等字符串返回true。我怎么解决这个问题?更新:这是否意味着如果我想检查特定字符串是否是有效的日期时间,我需要一个巨大的格式数组?我敢肯定有不同的组合。尽管根据文化有很多日期分隔符(“.”、“/”、“-”等),但我在定义一组要检查的格式时遇到了麻烦。基本上,我想检查一个特定的字符串是否包含最少的天(1到31或01到31),月(1到12或01到12)和年(yyyy或yy),以任何顺序,任何日期分隔符,解决办法是什么?因此,如果该值包含时间的任何部分,它也应该返回true。我无法定义格式数组。如果您希望日期符合特定格式或格式,则使用DateTime.TryParseExact否则这是DateTime.TryParseExact的默认行为DateTime.TryParse此方法尽可能尝试忽略无法识别的数据,并用当前日期填充缺失的月份、日期和年份信息。如果s仅包含日期而没有时间,则此方法假定时间为午夜12:00。如果s包含具有两位数年份的日期组件,则会根据Calendar.TwoDigitYearMax属性的值将其转换为当前区域性的当前日历中的年份。s中的任何前导、内部或尾随空白字符都将被忽略。如果要确认多种格式,请查看DateTime.TryParseExact方法(String,String[],IFormatProvider,DateTimeStyles,DateTime)重载。来自同一个链接的示例:string[]formats={"M/d/yyyyh:mm:sstt","M/d/yyyyh:mmtt","MM/dd/yyyyhh:mm:ss","M/d/yyyyh:mm:ss","M/d/yyyyhh:mmtt","M/d/yyyyhhtt","M/d/yyyyh:mm","M/d/yyyyh:mm","MM/dd/yyyyhh:mm","M/dd/yyyyhh:mm"};string[]dateStrings={"5/1/20096:32PM","05/01/20096:32:05PM","5/1/20096:32:00","05/01/200906:32","05/01/200906:32:00PM","05/01/200906:32:00"};日期时间日期值;foreach(stringdateStringindateStrings){if(DateTime.TryParseExact(dateString,formats,newCultureInfo("en-US"),DateTimeStyles.None,outdateValue))Console.WriteLine("Converted'{0}'to{1}.",dateString,dateValue);elseConsole.WriteLine("无法将'{0}'转换为日期。",dateString);}//该示例显示以下输出://Converted'5/1/20096:32PM'to5/1/20096:32:00PM。//将'05/01/20096:32:05PM'转换为5/1/20096:32:05PM。//将'5/1/20096:32:00'转换为5/1/20096:32:00AM。//转换'05/01/200906:32'到2009年5月1日早上6:32:00。//将'05/01/200906:32:00PM'转换为5/1/20096:32:00PM。//将'05/01/200906:32:00'转换为5/1/20096:32:00AM。如果要匹配特定的日期格式,请使用DateTime.TryParseExact()stringformat="dddddMMMh:mmttyyyy";日期时间日期时间;如果(DateTime.TryParseExact(dateString,format,CultureInfo.InvariantCulture,DateTimeStyles.None,outdateTime)){Console.WriteLine(dateTime);}else{Console.WriteLine("不是日期");}[TestCase("11/08/1995",Result=true)][TestCase("1-1",Result=false)][TestCase("1/1",Result=false)]publicboolIsValidDateTimeTest(stringdateTime){string[]formats={"MM/dd/yyyy"};日期时间解析日期时间;返回DateTime.TryParseExact(dateTime,formats,newCultureInfo("en-US"),DateTimeStyles.None,outparsedDateTime);在格式数组中指定您希望接受的日期时间格式我用下面的代码解决了它:protectedboolCheckDate(Stringdate){try{DateTimedt=DateTime.Parse(date);返回真;}赶上{返回假;基本上,我想检查一个特定的字符串是否至少包含天(1到31或01到31)、月(1到12或01到12)和年(yyyy或yy)的任何顺序,以及任何日期分隔符,如何解决?因此,如果该值包含时间的任何部分,它也应该返回true。我无法定义格式数组。当我遇到类似情况时,我就是这样做的:收集我的系统预期支持的所有格式。看看什么是共同的或可以概括的。学习创建REGEX(这是一项初始投资,但一旦您自己创建一个或两个就会得到回报)。另外,不要尝试一次为所有格式构建REGEX,请遵循增量过程。我创建了REGEX来覆盖尽可能多的格式。在少数情况下,为了不让REGEX变得更复杂,我用DateTime.Parse()方法覆盖它。通过结合使用Parse和REGEX,我能够验证输入是否正确/符合预期。这个http://www.codeproject.com/Articles/13255/Validation-with-Regular-Expressions-Made-Simple对于理解和验证每种格式的语法非常有用。如果有帮助,我的2美分....尝试使用DateTime.ParseExact(txtPaymentSummaryBeginDate.Text.Trim(),"MM/dd/yyyy",System.Globalization.CultureInfo.InvariantCulture);如果输入字符串格式错误,则抛出异常,因此在catch部分可以返回false;所以这个问题得到了回答,但是使用的代码对我来说不够简单或完整。对我来说,这就是我要找的东西,也许其他人也会喜欢这个。以上是C#学习教程:使用DateTime.TryParse检查字符串是否为有效日期。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——if(DateTime.TryParse(DateString,outDateTimeTemp)==true){//dostuff}这篇文章是收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
