C# 更好的约会时间。在那里解析?

C# 更好的约会时间。在那里解析?,c#,.net,datetime,C#,.net,Datetime,有人知道有一个库(付费或非付费)能够处理比datetime.Parse使用的更常见的datetime格式吗?能够处理多种语言和缩写数天/月的东西会非常好 例如:“2009年9月1日”不适用于Datetime.Parse。要处理多种语言,可以使用不同的区域性调用Datetime.Parse Parse将处理开箱即用的缩写 如果您需要处理非标准组合,请致电DateTime.ParseExact我无法回答您的问题。如果你没有得到你喜欢的答案,请考虑DateTime.ParseExact。,我还必须指出

有人知道有一个库(付费或非付费)能够处理比datetime.Parse使用的更常见的datetime格式吗?能够处理多种语言和缩写数天/月的东西会非常好


例如:“2009年9月1日”不适用于Datetime.Parse。

要处理多种语言,可以使用不同的区域性调用Datetime.Parse

Parse将处理开箱即用的缩写


如果您需要处理非标准组合,请致电
DateTime.ParseExact

我无法回答您的问题。如果你没有得到你喜欢的答案,请考虑DateTime.ParseExact。

,我还必须指出,<>代码> DATETIME.TyPARSE 和DeTime.TyPARSEActudie方法存在。我认为,您需要担心尝试将字符串转换为日期时间或

的异常情况,这是非常令人毛骨悚然的。我过去曾使用过类似以下的代码(其中
expectedDateTimeFormats
是遵循以下规则的字符串):

如果您正在处理非标准缩写(如您在评论中提到的“2009年9月1日”),您可能需要创建一个自定义的
CultureInfo
DateTimeFormatInfo
,并自己定义它们


我不知道有哪一个“标准”自定义格式(和/或相关的
DateTimeFormatInfo
定义)的列表真的很好——如果有人能找到一个,他们当然应该是公认的答案。我再也无法访问我的老团队使用的解析器了(而且也没有权限共享它:()。

不知道它是否有“更好”的解析器,但你可以查看OS项目,

要解析非标准缩写的日期,你需要创建自己的文化

例如:(已测试)


显然,你可以回答这个问题。:-)我知道DateTime.ParseExact,但我正在寻找DateTime.Parse的实现,它可以比标准的DateTime格式找到更多的DateTime格式。你能给我们看一个DateTime.Parse(和ParseExact)无法处理的字符串吗?“2009年9月1日”不起作用。是的,我知道。不过,对于可能不符合datetime缩写标准的字符串,我希望有一个更强大的实现。这在某种程度上符合我的要求。也许在某个地方有这些自定义格式的列表?除此之外,还有月名缩写不同的问题。我不知道有什么好的列表(虽然谷歌搜索很有可能会找到),但如果你提供文化,那就应该注意月和日的缩写。DateTime.Parse不理解“2009年9月1日”。这就是我在这里所说的。这个设计的全部要点就是允许以这种方式定制格式。不需要新的实现。使用
DateTime.TryParse
而不是
try…catch
Hmmm…这可能是一种方法。现在,如果我能找到一组预定义的自定义区域性来处理不同区域性中的各种疯狂缩写,我希望这会阻止“Sep”的工作,但出于某种原因,3个字母的缩写即使不在该数组中也会继续工作。(数组每个月只能有一个缩写形式。)
// Or use custom DateTimeFormatInfo objects
string[] expectedDateTimeFormats = new string[] {
    "customFormat1",
    "customFormat2",
    "customFormatN",
};

// You could offer several overloads here, to accept other DateTimeStyles,
// InvariantCulture, CurrentUICulture, etc. - perhaps even a collection of
// CultureInfo objects to try
public DateTime TryParseDateString(string dateString, CultureInfo culture) {
    try {
        // first, try to parse given the specified culture's formats
        return DateTime.Parse(dateString, culture);
    }
    catch (FormatException) {
        // if that fails, try your custom formats
        return DateTime.ParseExact(dateString, 
                                   expectedDateTimeFormats, 
                                   culture,
                                   DateTimeStyles.None);
    }
}
var culture = new CultureInfo("en-US");
culture.DateTimeFormat.AbbreviatedMonthNames = new string[] { 
    "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec", "" 
};

DateTime.Parse("Sept 1, 2009", culture);