Я пытаюсь преобразовать мое форматированное значение строки в тип даты с форматом dd/MM/yyyy
.
this.Text="22/11/2009";
DateTime date = DateTime.Parse(this.Text);
В чем проблема ? У него есть второе переопределение, которое запрашивает IFormatProvider
. Что это? Как мне нужно передать это также? Если да, как использовать это для этого случая?
редактировать
Каковы различия между Parse
и ParseExact
?
Редактировать 2
Оба ответа Слэкс и Сэма работают на меня, в настоящее время пользователь предоставляет данные, но я буду уверен, что они действительны при использовании maskTextbox.
Какой ответ лучше, учитывая все аспекты, такие как безопасность типов, производительность или что-то, что вам нравится
Ответы:
Использование
DateTime.ParseExact
.источник
dd/MM/yyyy
так, что текстовая строка со временем не будет проанализирована должным образом. Вам нужно будет либо убрать время, либо включить его в шаблон формата. Существует перегрузка,ParseExact
которая принимает массив шаблонов формата и будет анализировать текст, если он соответствует любому из них.CultureInfo.InvariantCulture
вместо текущего, если вы все равно определяете формат?Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
, это сломает твое решение. Чтобы это исправить, используйте"dd'/'MM'/'yyyy"
(защищать косые черты одинарными кавычками) или@"dd\/MM\/yyyy"
(«экранировать» косые черты с помощью обратных косых черт).Вы должны позвонить
ParseExact
, который анализирует дату, которая точно соответствует формату, который вы предоставляете.Например:
IFormatProvider
Параметр определяет культуру использовать для разбора даты.Если ваша строка не получена от пользователя, вы должны пройти
CultureInfo.InvariantCulture
.Если строка действительно получена от пользователя, вы должны передать
CultureInfo.CurrentCulture
, что будет использовать настройки, которые пользователь указал в региональных настройках панели управления.источник
using System.Globalization;
Разбор строкового представления 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.Threading.Thread.CurrentThread.CurrentCulture
установлено, и если / почему оно отличается от того, что вы ожидаете.источник
Хотя приведенные выше решения эффективны, вы также можете изменить файл webconfig следующим образом ...
Ссылка: формат даты и времени отличается на локальной машине по сравнению с рабочей машиной
источник
Возможно, вам придется указать культуру для этого конкретного формата даты, как в:
Для более подробной информации перейдите сюда:
http://msdn.microsoft.com/en-us/library/5hh873ya.aspx
источник
Потратив много времени, я решил проблему
источник
используйте это для преобразования строки в datetime:
источник
Исходя из этой ссылки , у меня сработал следующий подход:
источник
источник
Точно так же, как кто-то сказал выше, вы можете отправить его в виде строкового параметра, но он должен иметь следующий формат: например, «20130121», и вы можете преобразовать его в этот формат, взяв его непосредственно из элемента управления. Например, вы получите его из текстового поля, например:
чтобы преобразовать его в «20130121», вы используете:
так что SQL может преобразовать его и поместить в вашу базу данных.
источник
Вы также можете использовать
источник
Работал для меня ниже кода:
Пространство имен
источник
Изменить вручную:
С 22.11.2015 будет конвертировано в 22.11.2015
источник