如何从包含额外字符的字符串中解析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
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
。