Ошибка при конвертации строки в дату C#
В отладчике смотрел — действительно, приходит string "01.03.2021".
Если же в коде указать конкретную дату "01.03.2021", то работает без ошибок:
Помогите решить проблему. Спасибо.
Специально, для тех, кто не верит — принтскрин отладчика: 
Ответы (1 шт):
Спасибо за наводку. Действительно, сравнил длины строк — разные! Оказывается, в приходящей строке были непечатные символы. Строка приходит из javascript, поэтому это и происходит. Решил проблему удалением указанных символов из строки перед конвертацией в дату:
Строка не была распознана как допустимый DateTime «формат дд / мм / гггг»
Я пытаюсь преобразовать значение строки в формате date в формат даты dd/MM/yyyy .
В чем проблема? Он имеет второе переопределение, которое запрашивает IFormatProvider . Что это? Нужно ли мне это передавать? Если да, как использовать его для этого случая?
Изменить
В чем разница между Parse и ParseExact ?
Изменить 2
Оба ответа Slaks и Sam работают для меня, в настоящее время пользователь вводит ввод, но я уверен, что они действительны с помощью maskTextbox.
Какой ответ лучше рассматривать во всех аспектах, таких как тип saftey, производительность или что-то, что вам нравится
14 ответов
Вам нужно вызвать ParseExact , который анализирует дату, которая точно соответствует предоставленному вами формату.
Параметр IFormatProvider указывает культуру, используемую для анализа даты.
Если ваша строка не принадлежит пользователю, вы должны передать CultureInfo.InvariantCulture .
Если строка поступает от пользователя, вы должны передать CultureInfo.CurrentCulture , который будет использовать параметры, указанные пользователем в региональных параметрах на панели управления.
Анализ строкового представления DateTime является сложной задачей, потому что разные культуры имеют разные форматы дат..Net знает эти форматы даты и извлекает их из вашей текущей культуры ( System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat ), когда вы вызываете DateTime.Parse(this.Text) ;
Например, строка «22/11/2009» не соответствует ShortDatePattern для США (en-US) но он подходит для Франции (fr-FR).
Теперь вы можете вызвать DateTime.ParseExact и передать строку точного формата, которую вы ожидаете, или передать соответствующую культуру в DateTime.Parse для анализа даты.
Например, это правильно проверит вашу дату:
Конечно, вы не должны просто произвольно выбирать Францию, а что-то подходящее для ваших нужд.
System.FormatException: String не был распознан как допустимый DateTime
Я делаю клиент-серверный проект в winforms, используя С#. Клиент запрашивает файлы в определенную дату. клиент работает в 7-битной системе Windows 32, а сервер работает в Windows Server 2008 R2.
Этот код в моем клиенте преобразует значение даты и времени в строку.
Это код, используемый на сервере для возврата значения даты и времени из строки.
Я получаю «System.FormatException: String не был распознан как допустимый DateTime. at System.DateTimeParse.ParseExact (String s, формат строки, DateTimeFormatInfo dtfi, стиль DateTimeStyles)» эта ошибка на стороне сервера. Как это решить? Любая помощь, пожалуйста.
задан 14 июн ’12, 07:06
Какой тип данных используется для даты или времени sqlserver? Я думаю, что DateTime.ParseExact принимает только 3 параметра — COLD TOLD
Как вы его отправляете? — V4Vendetta
Просто чтобы быть уверенным, проверьте, что dat содержит непосредственно перед выполнением последней строки кода ( ParseExact ). Кроме того, проверьте, можете ли вы выполнять эти преобразования без каких-либо серверов и т. д. Выберите дату, преобразуйте в строку, преобразуйте обратно в дату и посмотрите, работает ли это. — SimpleVar
Я думаю, что кодировка неверна, что приводит к некоторым недопустимым символам и сбою при синтаксическом анализе, можете ли вы проверить это с помощью Unicode, поскольку строки .Net находятся в Unicode. — V4Vendetta
Что заставляет вас думать, что строка в ASCII? Я думаю, что это скорее юникод или UTF. я бы использовал GetEncoding метод для проверки кодировки строк перед попыткой преобразования. Даже если он в ASCII, код будет более надежным, если вы выполните проверку перед преобразованием. — evanmcdonnal
Как исправить ошибку: строка не распознана как действительное значение datetime ошибка
Привет ребята, я искал много о том, как это исправить, но ничего не работает для меня я думаю, что я делаю что-то не так, что я не знаю, чтобы исправить проблему 1. я торгую метод ParseExact, как все потоки здесь предлагают, но все равно эта ошибка всегда выходила вот мой пример кода:
В этом коде я пытаюсь подсчитать все строки в DataGridView, которые будут попадать между выбранной датой начала и датой окончания из двух DateTimePicker. Я не знаю, сработает ли это, но я должен исправить 1-я Ошибка 1-я, так что я могу проверить, работает он или нет. Формат даты для моего DataGridView таков: 30/03/2016 15: 51 просто чтобы вы знали. Заранее спасибо! 🙂
3 ответов:
Вам не нужно форматировать DateTimePicker.Text в String , а затем Parse его в DateTime , чтобы использовать его. Просто используйте DateTimePicker.Value :
Тем не менее, в зависимости от того, как DateTimePicker.Format Ваш DateTimePicker.Text может выглядеть по-разному:
И, следовательно, не соответствует вашему формату «dd/MM/yyyy HH:mm» и, следовательно, дает вам ошибку.
Предполагая, что ваш DataTimePicker1 на самом деле является DateTimePicker элементом управления, Вы можете просто использовать свойство Value :
Здесь не требуется преобразование в строку и обратно к дате. [Причина сбоя кода, вероятно, связана с тем, что .ToString не выдает дату в точном формате, который вы указываете]
На самом деле вам также не нужно хранить это в переменной, поэтому вы можете значительно упростить свой код:
Обратите внимание, что вы использовали & , где вы должны были используется AndAlso — убедитесь, что вы переключаетесь Option Strict On , чтобы поймать такие вещи