从字符串提取日期

问题描述:

我想从string.String提取日期和一些文本的组合,但日期格式更改为例如1. 12/2/2014 12:00:00 AM第一天2。星期一2014年九月12日第二天形成这两种格式我如何提取日期并将其转换为日期时间在C#中。从字符串提取日期

+1

这两个字符串是什么?你可以用适当的格式显示它们吗? – 2014-12-09 12:31:01

+0

阅读一些正则表达式。 – 2014-12-09 12:31:46

+0

给出的例子是1和2是两个字符串我不能使用正则表达式格式更改运行时间 – 2014-12-09 12:35:38

您可以使用ParseExact/TryParseExact与允许格式的数组:

string strDate1 = "12/2/2014 12:00:00 AM"; 
string strDate2 = "Mon 12 Sep 2014"; // it was a friday ;) 
string[] allowedFormats = { "dd/M/yyyy hh:mm:ss tt", "ddd dd MMM yyyy" }; 
DateTime dt; 
if (DateTime.TryParseExact(strDate1, allowedFormats, System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.None, out dt)) 
{ 
    Console.WriteLine("strDate1 parsed successfully: " + dt); 
} 
if (DateTime.TryParseExact(strDate2, allowedFormats, System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.None, out dt)) 
{ 
    Console.WriteLine("strDate2 parsed successfully: " + dt); 
} 

然而,周一2014年9月12日不能被解析,因为它不是一个星期一,但星期五。

如果字符串中还包含“垃圾”,则需要先将其删除。您可以使用以下LINQ查询,它使用格式字符串'Length获取字符串的相关部分:

string[] dateStrings = { "12/2/2014 12:00:00 AM garbage garbage", "Fri 12 Sep 2014garbage" }; 
string[] allowedFormats = { "dd/M/yyyy hh:mm:ss tt", "ddd dd MMM yyyy" }; 
DateTime dt = default(DateTime); 
var dates = from dateString in dateStrings 
      from format in allowedFormats 
      where format.Length <= dateString.Length 
      let datePart = dateString.Substring(0, format.Length) 
      where DateTime.TryParseExact(datePart, format, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out dt) 
      select dt; 
DateTime[] validDates = dates.ToArray(); // both dates parsed successfully 
+0

strDate1就像strDate1 =“1/1/2015 12:00:00 AM asas”and strDate2 =“Mon 23 1 dec 2014 asasas”所以它不起作用 – 2014-12-09 12:41:21

+0

@ GaneshGadekar:然后先去掉垃圾,'asas'不足以确定规则。 – 2014-12-09 12:42:48

+0

是的,你是对的,但我有同样的问题日期附有描述。 – 2014-12-09 12:44:57