2014-12-09 59 views
0

我想從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

回答

3

您可以使用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