Строка DateTime.parse не была распознана

#c# #date #parsing #datetime

#c# #Дата #синтаксический анализ #datetime

Вопрос:

Я не могу понять, почему мое строковое значение продолжает выдавать исключение для того, что должно быть допустимой строкой. У меня есть строка date в формате "30/09/2016 14:55:00" (вызывается myDate ), и я попробовал следующее, чтобы перевести ее в формат datetime:

 DateTime.ParseExact(myDate, "dd/MM/yyyy HH:mm:ss", null);
DateTime.ParseExact(myDate, "dd/MM/yyyy HH:mm:ss", CultureInfo.CurrentCulture);
DateTime.Parse(myDate);
  

Я не вижу, где я ошибся, я что-то пропустил?

Редактировать:

Текущее значение myDate

введите описание изображения здесь

Сохраняет контекст при вызове синтаксического анализа введите описание изображения здесь

Исключение введите описание изображения здесь

То же самое верно и для всех других версий синтаксического анализа строки в DateTime

Комментарии:

1. Я также просматривал предыдущие ответы на этот вопрос, для которых все указывали на вышеупомянутое, но безуспешно

2. Итак, какое исключение вы получаете и что оно говорит? У меня все работает…

3. @GiladGreen Я опубликую скриншот

4. Какова ваша текущая культура?

5. @Novastorm — просто в качестве примечания, варианты 1 и 2 идентичны. прочитайте последнюю строку этого

Ответ №1:

Ваша строка содержит дополнительные кавычки, которые вы должны удалить перед вызовом DateTime.Parse . Вы можете удалить кавычки, вызвав

 myDate = myDate.Trim('"');
DateTime.ParseExact(myDate, "dd/MM/yyyy HH:mm:ss", null);
  

Комментарии:

1.Использование null в качестве a IFormatProvider может быть опасным, поскольку это означает «использовать CurrentCulture настройки», OP CurrentCulture могут не использоваться / как DateSeparator и / или : как TimeSeparator и в таком случае ваш код выдает FormatException . Было бы лучше указать правильную (возможно InvariantCulture ) настройку культуры, чтобы предотвратить подобные ситуации.

Ответ №2:

Проблема в том, что в вашей строке есть extra " , а затем, когда вы анализируете, она выдает исключение. Ваша строка "30/09/2016 14:55:00" на самом деле ""30/09/2016 14:55:00""

Удалите " , а затем выполните синтаксический анализ:

 string myDate = ""30/09/2016 14:55:00"";
var result = DateTime.ParseExact(myDate.Replace(""",""), "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
  

Или, поскольку она всегда находится в конце строки, вы можете использовать .Trim метод

Ответ №3:

Похоже, у вас есть дополнительные нежелательные двойные кавычки в вашей строке.

Попробуйте это и посмотрите, работает ли это:

 var date = DateTime.ParseExact(myDate.Trim('"'), "dd/MM/yyyy HH:mm:ss", CultureInfo.CurrentCulture);