C# 解析格式不一致的日期
当日期不一致时,我应该如何编写我试图解析的日期的格式C# 解析格式不一致的日期,c#,datetime,C#,Datetime,当日期不一致时,我应该如何编写我试图解析的日期的格式 DateTime.TryParse(date, out dateParsed); sale.DateProcessed = dateParsed; 处理错误,指定新格式,并继续尝试不同的格式 还是有一种方法可以一次性完成 以下是我的数据摘录,正如您所看到的,这些数据在格式方面并不十分一致: 11月9日 10月9日 9月9日 5月9日 09年3月 2009年2月 1月9日 12月08日 11月8日 10月8日 9月8日
DateTime.TryParse(date, out dateParsed);
sale.DateProcessed = dateParsed;
处理错误,指定新格式,并继续尝试不同的格式
还是有一种方法可以一次性完成
以下是我的数据摘录,正如您所看到的,这些数据在格式方面并不十分一致:
11月9日
10月9日
9月9日
5月9日
09年3月
2009年2月
1月9日
12月08日
11月8日
10月8日
9月8日
八月八日
七月八日
六月八日
5月8日
四月八日
三月八日
2月08日
一月八日
2007年12月
2007年11月如果这是您的数据的代表性,您可以对每个数据进行按摩并: 1) 将月份切碎为三个字母的缩写(string.Substring应该可以做到这一点)
2) 在年头加上“20”
然后从那里解析?还是有更多的格式需要处理?总而言之,您的数据实际上是相当一致的。如果这是您的数据的代表性,您可以对每个数据进行按摩并: 1) 将月份切碎为三个字母的缩写(string.Substring应该可以做到这一点)
2) 在年头加上“20”
然后从那里解析?还是有更多的格式需要处理?总而言之,您的数据实际上是相当一致的。我只需要一个字典,它可以将短月份名称映射到完整月份名称Jan=>一月。然后在解析之前,将短名称转换为长名称。我将有一个字典,其中包含短月份名称到完整月份名称的映射Jan=>janur。然后在解析之前,将短名称转换为长名称。只需执行以下操作:
date = date.Substring(0, 3) + " 20" + date.Substring(date.IndexOf(' ') + 1);
只要这样做:
date = date.Substring(0, 3) + " 20" + date.Substring(date.IndexOf(' ') + 1);
- 使用空格作为分隔符标记每行
- 在所有情况下,前三封信都会告诉你月份
- 将第二个令牌转换为整数,并向其添加2000,以获得年份
- 使用空格作为分隔符标记每行
- 在所有情况下,前三封信都会告诉你月份
- 将第二个令牌转换为整数,并向其添加2000,以获得年份
- 给你:
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);
}
给你:
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);
}
将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
);
将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
);
你是对的,看起来我在发帖前想得不够仔细。你是对的,看起来我发帖前想得不够仔细