有没有人知道一个库(付费与否)能够处理比DateTime.Parse使用更常见的日期时间格式?能够处理多种语言和缩写数天/月的东西真的很不错。
例如:“2009年9月1日”不适用于Datetime.Parse。
答案 0 :(得分:4)
过去我使用过以下代码(expectedDateTimeFormats
是遵循Custom Date and Time Format Strings规则的字符串):
// 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);
}
}
如果您正在处理非标准缩写(例如您在评论中提到的“2009年9月1日”),则可能需要创建自定义CultureInfo
或DateTimeFormatInfo
并定义它们自己。
我不知道一个非常好的“标准”自定义格式列表(和/或相关的DateTimeFormatInfo
定义) - 如果有人能找到一个,他们当然应该得到接受的答案。我无法再访问我的旧团队(无论如何也无法分享它:()。
答案 1 :(得分:2)
我还必须指出存在DateTime.TryParse
和DateTIme.TryParseExact
方法。我认为你需要担心尝试将字符串转换为DateTime或<insert object type here>
时出现异常,这是非常严重的。
答案 2 :(得分:1)
要处理多种语言,您可以使用不同的文化调用DateTime.Parse。
DateTime.Parse会处理开箱即用的缩写。
如果您需要处理非标准组合,请致电DateTime.ParseExact
。
答案 3 :(得分:1)
我无法回答你的问题。如果你没有得到你喜欢的答案,请考虑DateTime.ParseExact。
答案 4 :(得分:1)
要使用非标准缩写解析日期,您需要创建自己的文化。
例如:(已测试)
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);
答案 5 :(得分:0)
不知道它是否有任何“更好”的解析器,但您可以查看The Skeet's操作系统项目,Noda Time