2013-07-31 61 views
-7

我有一个字符串。字符串是这样的如何从包含多余字符的字符串中解析DateTime?

你好,我是编码器,我的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 

回答

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 
+0

月和日可能只有1个位数,你应该考虑的是 – aaronman

+0

@aaronman我考虑过,但OP的字符串有'12/09/2011',所以我认为没有必要。 –

+0

以及我没有downvote或任何东西,你不妨包括'Date.parse'所有你必须写'Date.parse(“12/09/2011”)' – aaronman

2

既然你不想使用正则表达式,简单地拆分在空间,然后使用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将包含日期字符串,并且您的将包含解析的DateTime