System formatexception строка не распознана как действительное значение datetime

от admin

Ошибка при конвертации строки в дату 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 , чтобы поймать такие вещи

Похожие статьи