如何从包含额外字符的字符串中解析DateTime?

时间:2013-07-31 18:44:39

标签: c# asp.net

我有一个字符串。字符串就像这样

  

您好我是编码员,我的DOB是12/09/2011。

我想从这句话中提取日期。我如何使用C#执行此操作?我不想要正则表达式。这是最近向我询问的一个面试问题。

这是我的尝试

string myStr = "Hello 12/3/2013";
            DateTime s;
            DateTime.TryParse(myStr,out s);
            Console.WriteLine(s);

我的输出为

01-01-0001 00:00:00

2 个答案:

答案 0 :(得分:4)

C#和JavaScript都支持正则表达式。您可以使用此模式查找字符串的该部分:

\d{2}/\d{2}/\d{4}

当然,这并不能确保它是一个有效的日期,例如13/88/0000会匹配该模式。然后,您必须使用类似Date.Parse的内容来解析字符串。


但是,既然你说正则表达式不是一个选项,这里有一个非常粗糙的单行:

var input = "Hello I am a Coder, My DOB is 12/09/2011.";
DateTime date = new DateTime();
input.Split().SkipWhile(s => !DateTime.TryParse(s, out date)).Any();

Console.WriteLine(date); // 12/9/2011 12:00:00 AM

答案 1 :(得分:2)

由于您不想使用REGEX,只需将字符串拆分为空格,然后使用DateTime.TryParseExact查看是否有任何字符串被解析为DateTime

string str = "Hello I am a Coder, My DOB is 12/09/2011";
string[] array = str.Split();//splits on space
string dateFormat = "M/d/yyyy"; //works with both single digit and double digit 
                                //(day/month) for parsing
                                //or d/M/yyyy depending your date culture
DateTime tempDateTime;
var result = array.FirstOrDefault(r => 
                                    DateTime.TryParseExact
                                            (r, 
                                            dateFormat, 
                                            CultureInfo.InvariantCulture, 
                                            DateTimeStyles.NoCurrentDateDefault, 
                                            out tempDateTime));

您的result将包含日期字符串,而您的tempDateTime将包含已解析的DateTime