我有一大塊文字是這樣的:解析這種字符串到日期時間 - 「星期五2013年3月22日」(C#)
....建議,星期五2013年3月22日有潛力將被宣佈爲一天.....
我必須找到並解析DateTime(2013年3月22日星期五)。我可以找到它並使用DateTime.TryParse獲取幾乎所有內容,但序號後綴(st,nd,rd,th)將我拋棄。
當我在調用TryParse方法之前構造格式字符串時,是否可以使用通配符來考慮這些後綴?還是有其他建議?
謝謝!
我有一大塊文字是這樣的:解析這種字符串到日期時間 - 「星期五2013年3月22日」(C#)
....建議,星期五2013年3月22日有潛力將被宣佈爲一天.....
我必須找到並解析DateTime(2013年3月22日星期五)。我可以找到它並使用DateTime.TryParse獲取幾乎所有內容,但序號後綴(st,nd,rd,th)將我拋棄。
當我在調用TryParse方法之前構造格式字符串時,是否可以使用通配符來考慮這些後綴?還是有其他建議?
謝謝!
如何使用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
這應該照顧大多數情況下,但一定要正確測試它。
當你有星期天時,「nd」將被替換爲「」,然後kaboom! – 2013-03-21 00:55:38
@NikolaDavidovic你讀過我的完整答案嗎?再次閱讀最後一部分。 :) – eandersson 2013-03-21 00:56:12
你提出的答案是錯誤的,但後來的推廣是好的。你爲什麼不建議正則表達式? – 2013-03-21 00:57:56
你總是可以暴力強迫它。
注意:我要借用一些富士的代碼,所以我們有相同的外觀和感覺。
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。
有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);
}
你有沒有嘗試刪除這些後綴使用string.replace或正則表達式?這是一個選擇嗎? – 2013-03-21 00:50:22