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

本文关键字:字符串 DateTime 字符 包含额 | 更新日期: 2023-09-27 18:25:46

我有一个字符串。字符串类似于

你好,我是一名编码员,我的出生日期是2011年9月12日。

我想从这句话中提取日期。我如何使用C#来实现这一点?我不想要正则表达式。这是最近问我的一个面试问题。

这是我的尝试

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

我得到的输出是

01-01-0001 00:00:00

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

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

由于您不想使用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将包含Date字符串,tempDateTime将包含解析后的DateTime