如何在不一致的情况下编写我正在尝试解析的日期格式?
DateTime.TryParse(date, out dateParsed);
sale.DateProcessed = dateParsed;
处理错误,指定新格式,并继续尝试不同的格式?
或者有没有办法一次性完成?
这是我的数据的摘录,正如您所看到的那样格式化不一致:
十一月09
十月09
09年9月
09年5月
三月09
二月09
一月09
十二月08
十一月08
十月08
九月08
08年8月
08年7月
2008年6月
08年5月
08年4月
08年3月
2008年2月
08年1月
07年12月
2007年11月
答案 0 :(得分:3)
将DateTime.TryParseExact与自定义格式数组一起使用:
DateTime.TryParseExact(
dateString,
new String[]{
"MMM yy",
"MMM. yy",
"MMM\\t. yy",// for 4-letters Sept.
"MMMM yy"}, // full name of month
New CultureInfo("en-US"),
DateTimeStyles.None,
dateValue
);
答案 1 :(得分:1)
如果这代表您的数据,您可以按摩每一个并且:
1)将月份切换为三个字母的缩写(string.Substring应该做的伎俩)
2)在年底前加上“20”
然后从那里解析?还是有更多格式要处理?总而言之,您的数据实际上非常一致。
答案 2 :(得分:1)
这样做:
date = date.Substring(0, 3) + " 20" + date.Substring(date.IndexOf(' ') + 1);
答案 3 :(得分:0)
我只有一个字典,其中包含短月份名称到完整月份名称的映射Jan =>一月。然后在解析转换短名称到长名称之前。
答案 4 :(得分:0)
答案 5 :(得分:0)
你走了:
DateTime GetDate(string raw){
int month;
switch(raw.Substring(0,3).ToLower()){
case "jan": month = 1; break;
case "feb": month = 2; break;
...
case "dec": month = 12; break;
default: throw new ArgumentException("raw", "Failed to parse month");
}
int year = int.Parse("20" + raw.Substring(raw.Length - 2));
return new DateTime(year, month, 1);
}