#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
в качестве aIFormatProvider
может быть опасным, поскольку это означает «использоватьCurrentCulture
настройки», OPCurrentCulture
могут не использоваться/
как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);