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
          );
          

          你是对的,看起来我在发帖前想得不够仔细。你是对的,看起来我发帖前想得不够仔细