Строка не была распознана как действительный DateTime при преобразовании Datetime - PullRequest
0 голосов
/ 01 июня 2018

Я пытался преобразовать формат даты и времени, как показано ниже, но продолжаю получать эту проблему.Он отлично работает для первых трех в данном примере, но для четвертого выдает исключение.Не уверен, почему происходит такое исключение.

Примеры:

  • 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 голосов
/ 01 июня 2018

Это связано с тем, что первые три имеют тип 12-часов, а последний - типа 24-часов, поэтому, когда система пытается преобразовать его, она видит (14), который не является часом для текущего формата.

Используемые форматы: (чч) для 12 часов.Вместо этого используйте (ЧЧ) для 24 часов.

Почему вы ставите все форматы?Просто используйте методы анализа в классе DateTime.

0 голосов
/ 01 июня 2018

Вы пробовали это?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...