Строка не была признана действительным DateTime “format dd / MM / yyyy”

Я пытаюсь преобразовать значение строки в формате date в формат даты dd/MM/yyyy .

 this.Text="22/11/2009"; DateTime date = DateTime.Parse(this.Text); 

В чем проблема ? Он имеет второе переопределение, которое запрашивает IFormatProvider . Что это? Нужно ли мне это передавать? Если да, как использовать его для этого случая?

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

Каковы различия между Parse и ParseExact ?

Изменить 2

Оба ответа Slaks и Sam работают для меня, в настоящее время пользователь вводит данные, но я уверен, что они действительны с помощью maskTextbox.

Какой ответ лучше, учитывая все аспекты, такие как saftey, производительность или что-то, что вам кажется

Используйте DateTime.ParseExact .

 this.Text="22/11/2009"; DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", null); 

Вам нужно вызвать ParseExact , который анализирует дату, которая точно соответствует предоставленному вами формату.

Например:

 DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture); 

Параметр 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 для анализа даты.

Например, это правильно проверит вашу дату:

 DateTime.Parse( "22/11/2009", CultureInfo.CreateSpecificCulture("fr-FR") ); 

Конечно, вы не должны просто выбирать Францию, а что-то подходящее для ваших нужд.

Вам нужно выяснить, что такое System.Threading.Thread.CurrentThread.CurrentCulture , и если / почему оно отличается от ожидаемого.

Хотя приведенные выше решения эффективны, вы также можете изменить файл webconfig следующим образом …

      

Ссылка: формат даты и времени на локальном компьютере по сравнению с производственной машиной

Возможно, вам нужно указать культуру для данного формата даты, как в:

  Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); //dd/MM/yyyy this.Text="22/11/2009"; DateTime date = DateTime.Parse(this.Text); 

Более подробную информацию см. Здесь:

http://msdn.microsoft.com/en-us/library/5hh873ya.aspx

используйте это, чтобы преобразовать строку в datetime:

 Datetime DT = DateTime.ParseExact(STRDATE,"dd/MM/yyyy",System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat) 
 private DateTime ConvertToDateTime(string strDateTime) { DateTime dtFinaldate; string sDateTime; try { dtFinaldate = Convert.ToDateTime(strDateTime); } catch (Exception e) { string[] sDate = strDateTime.Split('/'); sDateTime = sDate[1] + '/' + sDate[0] + '/' + sDate[2]; dtFinaldate = Convert.ToDateTime(sDateTime); } return dtFinaldate; } 

Проведя много времени, я решил проблему

  string strDate = PreocessDate(data); string[] dateString = strDate.Split('/'); DateTime enter_date = Convert.ToDateTime(dateString[1]+"/"+dateString[0]+"/"+dateString[2]); 

Основываясь на этой ссылке , следующий подход работал для меня:

 // eg format = "dd/MM/yyyy", dateString = "10/07/2017" var formatInfo = new DateTimeFormatInfo() { ShortDatePattern = format }; date = Convert.ToDateTime(dateString, formatInfo); 

Точно так же, как кто-то из вышеперечисленных, вы можете отправить его как строковый параметр, но он должен иметь этот формат: «20130121», например, и вы можете преобразовать его в этот формат, взяв его непосредственно из элемента управления. Поэтому вы получите его, например, из текстового поля:

 date = datetextbox.text; // date is going to be something like: "2013-01-21 12:00:00am" 

чтобы преобразовать его в: «20130121» вы используете:

 date = date.Substring(6, 4) + date.Substring(3, 2) + date.Substring(0, 2); 

так что SQL может преобразовать его и поместить в вашу базу данных.

Вы также можете использовать

 this.Text = "22112009"; DateTime newDateTime = new DateTime(Convert.ToInt32(this.Text.Substring(4, 4)), // Year Convert.ToInt32(this.Text.Substring(2,2)), // Month Convert.ToInt32(this.Text.Substring(0,2)));// Day 

Работал для меня под кодом:

 DateTime date = DateTime.Parse(this.Text, CultureInfo.CreateSpecificCulture("fr-FR")); 

Пространство имен

 using System.Globalization; 

Простой способ без внешних ссылок:

 public string FormatDate(string date, string format) { try { return DateTime.Parse(date).ToString(format); } catch (FormatException) { return string.Empty; } } 

Изменить вручную:

 string s = date.Substring(3, 2) +"/" + date.Substring(0, 2) + "/" + date.Substring(6, 4); 

С 22.11.2015 он будет конвертирован в 22/11/2015

  • Сколько стоит слишком много с ключевым словом C ++ 11 auto?
  • Преобразование hex в текстовое представление в десятичное число
  • make arrayList.toArray () возвращает более конкретные типы
  • Строка к двоичной в C #
  • Есть ли способ отключить перегрузку функций в Postgres
  • Типы и classы переменных
  • Тип указателя возвращаемой функции
  • Как запросить json-столбец для пустых объектов?
  • Что круто о дженериках, зачем их использовать?
  • Почему некоторые люди предпочитают «T const &» над «const T &»?
  • Когда использовать значения без знака над подписанными?
  • Interesting Posts

    Windows 7 – Быстрые приложения / переключатели окон, например, набрав имя приложения?

    Безопасность Android SharedPreference

    Как передать аргументы командной строки в приложение WinForms?

    Поворот элементов в CSS, которые правильно влияют на их родительскую высоту

    Form_Load () ‘event’ или Override OnLoad ()

    Как можно полностью отключить хранилище Windows в Windows 8

    инициализация C ++ std :: istringstream из буфера памяти?

    Исправление npm-пути в Windows 8 и 10

    Шрифты facebook испорчены

    Crash или «segmentation fault», когда данные копируются / отсканированы / прочитаны неинициализированному указателю

    Получение абсолютных URL-адресов с использованием ядра ASP.NET

    Как перемещаться по IEnumerable пакетами

    OSX Lion: Могу ли я использовать «классическую» прокрутку мыши, но сохранить «естественную» прокрутку трекпада?

    Что означает атрибут Enlue Enum в C #?

    Используйте функциональные клавиши для вставки определенного текста

    Давайте будем гением компьютера.