转换Datetime时,字符串未被识别为有效的DateTime

时间:2018-06-01 07:17:06

标签: c# winforms

我一直在尝试转换日期时间格式,如下所示,但一直遇到此问题。它适用于给定示例的前三个,但对于第四个,它会引发异常。不确定为什么会发生这种异常。

示例:

  •   

    02-05-2018 12:07:00

  •   

    02-05-2018 11:56:00

  •   

    02-05-2018 11:56:00

  •   

    02-05-2018 14:12:00 (此问题发生)

C#代码:

if (item.ReceivedDate != null && item.ReceivedDate != "")
{ 
   string[] formats = { "HH:mm:ss MM-dd-yyyy","hh:mm MM/dd/yyyy","dd-MM-yyyy hh:mm:ss","MM/dd/yyyy", "MM-dd-yyyy", "dd MMM yy", "dd-MMM-yyyy","dd-MM-yyyy", "MM-dd-yyyy", "d-M-yyyy", "d-MMM-yy", "dd-MMM-yy", "d-MMMM-yyyy","M-d-yyyy h:mm:ss tt", "M-d-yyyy h:mm tt",
   "MM-dd-yyyy hh:mm:ss", "M-d-yyyy h:mm:ss","yyyy-MM-dd","dd/MM/YYYY hh:mm","MM/dd/yyyy hh:mm tt","MM/dd/yyyy H:mm","MM/dd/yyyy h:mm tt",
   "M-d-yyyy hh:mm tt", "M-d-yyyy hh tt","MM/dd/yyyy hh:mm:ss","MM/dd/yyyy HH:mm","MMMM dd","yyyy’-‘MM’-‘dd’T’HH’:’mm’:’ss.fffffffK","ddd, dd MMM yyy HH’:’mm’:’ss ‘GMT’",
   "M-d-yyyy h:mm", "M-d-yyyy h:mm","yyyy’-‘MM’-‘dd’T’HH’:’mm’:’ss","yyyy MMMM","dddd, dd MMMM yyyy","dddd, dd MMMM yyyy HH:mm:ss",
   "MM-dd-yyyy hh:mm", "M-dd-yyyy hh:mm",
   "MM-d-yyyy HH:mm:ss.ffffff"};
    string DATE = Convert.ToString(item.ReceivedDate);
    //DATE = DATE.Replace(' ', '-').Replace('/', '-');
    //DATE = DATE.ToString(System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR"));
   string[] NEwDAte = (DATE.ToCharArray()[5] == ' ') ? DATE.Split(' ')[1].Trim().Split('-') : new[] { DATE };
    dr["Receiving Date"] = (DATE.ToCharArray()[5] == ' ') ? (NEwDAte[2] + "-" + NEwDAte[0] + "-" + NEwDAte[1]) : DateTime.ParseExact(DATE, formats, CultureInfo.InvariantCulture, DateTimeStyles.None ).ToString("dd/MM/yyyy");
    //dr["Receiving Date"] = (DATE.ToCharArray()[5] == ' ') ? (NEwDAte[2] + "-" + NEwDAte[0] + "-" + NEwDAte[1]) : Convert.ToDateTime(item.ReceivedDate).ToString("yyyy-MM-dd");
}
else
{ 
    dr["Receiving Date"] = "";
}
    Finaltable.Rows.Add(dr.ItemArray);

帮我解决此问题。感谢

2 个答案:

答案 0 :(得分:1)

这是因为前三个是12小时类型,而最后一个类型是24小时类型,所以当系统尝试转换它时,它会看到(14)这不是一小时的当前格式。

您使用的格式为(hh),为12小时。相反,使用(HH)24小时。

为什么要放置所有格式?只需使用DateTime类中的解析方法。

答案 1 :(得分:0)

你试过这个吗?

var d = DateTime.ParseExact("02-05-2018 14:12:00", "dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture);

Console.WriteLine(d.ToLongDateString());

检查这是否有帮助。

在此处阅读 DateTime.ParseExact 方法:https://msdn.microsoft.com/en-us/library/w2sa9yss(v=vs.110).aspx