使用.NET解析类似"2010年1月13日星期三"的日期

Dav*_*enn 22 c# datetime

如何将以下字符串转换为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);
Run Code Online (Sandbox Code Playgroud)

但由于字符串中的'th','st'或'rd',这不起作用

更新

似乎DateTime 不支持格式化 'th','st','rd'等,因此在解析之前需要剥离它们.鲁本斯法里亚斯在下面提供了一个很好的正则表达式.

Rub*_*ias 15

脱掉它们怎么样?

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);
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个'修复',而是一个新要求:`"(\ w +),?(\ w +)(\ d +)\ w +,?(\ d +)","$ 1 $ 3 $ 2 $ 4"` (2认同)