代码之家  ›  专栏  ›  技术社区  ›  Navoneel Talukdar

字符串未被识别为有效的日期时间c#错误

  •  -1
  • Navoneel Talukdar  · 技术社区  · 6 年前

    我有下面的代码,它将许多其他字符串格式转换为有效的datetime格式。

      try
      {
      outputDate = DateTime.Parse(inputDateTime);
      }
      catch
      {
      outputDate = DateTime.Parse(inputDateTime, new CultureInfo("en-US"));
      }
    

    的GetValidDateTimeFromString错误 -&燃气轮机;字符串未被识别为有效的日期时间。在System.DateTimeParse.Parse(字符串s、DateTimeFormatInfo dtfi、DateTimeStyles样式) 在O365InventoryApp.InventoryDataUtility.GetValidDateTimeFromString(字符串inputDateTime,TextWriter日志)

    的GetValidDateTimeFromString错误 14-10-2018 00:57:21 -&燃气轮机;字符串未被识别为有效的日期时间。在System.DateTimeParse.Parse(字符串s、DateTimeFormatInfo dtfi、DateTimeStyles样式) 在O365InventoryApp.InventoryDataUtility.GetValidDateTimeFromString(字符串inputDateTime,TextWriter日志)

    请注意突出显示的两个日期在转换时引发异常。我认为这是一个24小时格式的问题。所以我也尝试如下转换

    log.WriteLine("GetValidDateTimeFromString error for " + inputDateTime + "-> " + ex.Message + ex.StackTrace);
                        CultureInfo provider = CultureInfo.InvariantCulture;
                        DateTimeStyles style = DateTimeStyles.None;
                        string[] format = new string[] { "dd-MM-yyyy h:m:s tt", "dd-MM-yyyy hh:mm:ss tt" };
    
                        DateTime dt;
                        if (DateTime.TryParseExact(inputDateTime, format, provider, style, out dt))
                        {
                            log.WriteLine("updated date -" + dt);
                            outputDate = dt;
                        }
    

    谁能告诉我这里发生了什么事?

    3 回复  |  直到 6 年前
        1
  •  0
  •   jacdDev    6 年前

    outputDate = DateTime.ParseExact(inputDate, "dd-MM-yyyy HH:mm:ss", null);
    
        2
  •  0
  •   Barr J    6 年前

    这可能是在 CodeProject :

    这个 DateTimeFormatInfo 等级 System.Globalization 类在Windows10和旧版本上调用时应返回不同的日期格式字符串。

    例如(以波斯历法为例):

    String[] dateParts = s.Split('-');
    int year = int.Parse(dateParts[0]);
    int month = int.Parse(dateParts[1]);
    int day = int.Parse(dateParts[2]);
    PersianCalendar pc = new PersianCalendar();
    DateTime dt = pc.ToDateTime(year, month, day, 0, 0, 0, 0);
    

    引用:

    首先想到的方法是使用DateTime.Parse和 固定格式“yyyy/MM/dd”。但这在特定的日期将失败。所以呢

    试着分开你的线,看看这是否适合你。

        3
  •  0
  •   isaeid    6 年前

    我试过你的代码,把tt从格式末尾删除了。这对我很有用:

    var inputDateTime = "13-10-2018 05:00:27";
                CultureInfo provider = CultureInfo.InvariantCulture;
                DateTimeStyles style = DateTimeStyles.AllowInnerWhite;
                string[] format = new string[] { "dd-MM-yyyy h:m:s", "dd-MM-yyyy hh:mm:ss tt" }; // i removed tt from first format of formats array.
                DateTime dt;
                DateTime outputDate;
                DateTime.ParseExact(inputDateTime, format[0], provider);// and i used first index of formats array
    
    推荐文章