2013-03-21 55 views
5

我有一大塊文字是這樣的:解析這種字符串到日期時間 - 「星期五2013年3月22日」(C#)

....建議,星期五2013年3月22日有潛力將被宣佈爲一天.....

我必須找到並解析DateTime(2013年3月22日星期五)。我可以找到它並使用DateTime.TryParse獲取幾乎所有內容,但序號後綴(st,nd,rd,th)將我拋棄。

當我在調用TryParse方法之前構造格式字符串時,是否可以使用通配符來考慮這些後綴?還是有其他建議?

謝謝!

+1

你有沒有嘗試刪除這些後綴使用string.replace或正則表達式?這是一個選擇嗎? – 2013-03-21 00:50:22

回答

2

如何使用regex替換不需要的字符?

作爲一個例子,下面的正則表達式應該做的工作:"(?<=\d)[a-z]{2}"

示例代碼

string date = "Friday 22nd March 2013"; 
var r = new Regex(@"(?<=\d)[a-z]{2}"); 
String result = r.Replace(date, ""); 
Console.WriteLine(DateTime.Parse(result, CultureInfo.InvariantCulture)); 

輸出:

22/03/2013 00:00:00 

這應該照顧大多數情況下,但一定要正確測試它。

+1

當你有星期天時,「nd」將被替換爲「」,然後kaboom! – 2013-03-21 00:55:38

+0

@NikolaDavidovic你讀過我的完整答案嗎?再次閱讀最後一部分。 :) – eandersson 2013-03-21 00:56:12

+0

你提出的答案是錯誤的,但後來的推廣是好的。你爲什麼不建議正則表達式? – 2013-03-21 00:57:56

1

你總是可以暴力強迫它。

注意:我要借用一些富士的代碼,所以我們有相同的外觀和感覺。

string date = "Friday 22nd March 2013"; 
string[] split = date.Split(' '); 
string dayOfWeek = split[0]; // throw away & don't need 
int day = Convert.ToInt32(split[1].SubString(0, split[1].Length - 2); 
int month = 0; 
switch (split[2]) { 
    case "January": month = 1; break; 
    case "February": month = 2; break; 
    case "March": month = 3; break; 
    case "April": month = 4; break; 
    case "May": month = 5; break; 
    case "June": month = 6; break; 
    case "July": month = 7; break; 
    case "August": month = 8; break; 
    case "September": month = 9; break; 
    case "October": month = 10; break; 
    case "November": month = 11; break; 
    case "December": month = 12; break; 
} 
int year = Convert.ToInt32(split[3]); 
var dateTime = new DateTime(year, month, day); 
Console.WriteLine(dateTime); 

不是100%我得到了「新的DateTime」構造正確。我現在沒有運行IDE。

0

an overload of DateTime.Parse that allows multiple format strings - 你可以在序號爲文字字符串傳遞,這樣的helper方法(即使用線程區域摸出月/日的名稱拼寫):

private static DateTime ParseOrdinalDateTime(string dt) 
{ 
    string[] expectedFormats = new[] { 
             "dddd d'st' MMMM yyyy", 
             "dddd d'nd' MMMM yyyy", 
             "dddd d'rd' MMMM yyyy", 
             "dddd d'th' MMMM yyyy" 
             }; 

    return DateTime.ParseExact(dt, expectedFormats, null, DateTimeStyles.None); 
} 
相關問題