解析一个类似“2010年1月13日星期三”的日期”用.NET

如何将以下字符串转换为System.DateTime对象? 2010年1月13日星期三 2010年1月21日星期四 2010年2月3日星期三 通常情况下会像下面这样做
DateTime dt;
DateTime.TryParseExact(value, "dddd d MMMM yyyy", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out dt);
但由于字符串中的'th','st'或'rd',这不起作用 更新 似乎DateTime不支持格式化'th','st','rd'等因此在解析之前需要剥离它们。鲁本斯法里亚斯在下面提供了一个很好的正则表达式。     
已邀请:
脱掉它们怎么样?
string value = "Wednesday 13th January 2010";
DateTime dt;
DateTime.TryParseExact(
    Regex.Replace(value, @"(w+ d+)w+ (w+ d+)", "$1 $2"),
    "dddd d MMMM yyyy", 
    DateTimeFormatInfo.InvariantInfo, 
    DateTimeStyles.None, out dt);
    
另一种方法。
string sDate = "Wednesday 13th January 2010";
string[] sFields = sDate.Split (' ');
string day = sFields[1].Substring (0, (sFields[1].Length - 2));
DateTime date = new DateTime (sFields[3], sFields[2], day);
    
使用转义字符进行处理的另一种方法(
st
nd
rd
th
),而不是在调用ѭ7之前剥离它们
string dtstr = "Saturday 23rd January 2016";
DateTime dt;
string[] formats = new string[] { 
    "dddd d\s\t MMMM yyyy", "dddd d\n\d MMMM yyyy",
    "dddd d\r\d MMMM yyyy", "dddd d\t\h MMMM yyyy" };
bool result = DateTime.TryParseExact(dtstr, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);
    
“th”,“st”,“nd”或“rd”在哪里出现? 星期一 星期二 星期三 星期四 星期五 星期六 星期日 一月 二月 游行 四月 可以 六月 七月 八月 九月 十月 十一月 十二月 但是你知道那些4将始终跟一个空格。除非我错过了一些东西,简单
value = value.Replace("August","Augus").Replace("nd ","").Replace("st ","").Replace("nd ","").Replace("rd ","").Replace("Augus","August");
DateTime dt;
DateTime.TryParseExact(value,"DDDD dd MMMM yyyy", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out dt);
    
对我来说没有任何意义,但这对于一般的DataTime解析看起来很有趣:http://www.codeproject.com/KB/datetime/date_time_parser_cs.aspx?msg = 3299749     
我记得这篇关于使用MGrammar解析许多表达日期和时间的方法的帖子。它并不能完全回答您的问题,但它可能会成为一个有用的基础,具体取决于您的最终目标。     
扩展了Kenny的方法,我添加了一些代码来将整数传递给DateTime变量......
string sDate = "Wednesday 13th January 2010";
string[] dateSplit = sDate.Split (' ');
string day = dateSplit[1].Substring(0, dateSplit[1].Length - 2);
int monthInDigit = DateTime.ParseExact(dateSplit[3], "MMMM", CultureInfo.InvariantCulture).Month;
DateTime date = new DateTime(Convert.ToInt16(year), monthInDigit, day);
    

要回复问题请先登录注册