Вопрос

DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum.Text);

txtdatumdokum.text похож на "09.09.2011".

Но я получаю ошибку formatexception. Должен ли я проанализировать дату?

Это было полезно?

Решение

Попробуйте datetime.parseexact с Dd.mm.yyyy формат строки

 DateTime.ParseExact(txtDatumDokum.Text, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None);

Другие советы

В любом случае не нравится видеть, попробуйте это:

string s = "09.09.2011";
DateTime dt = Convert.ToDateTime(
    s.Replace(".",
    new System.Globalization.DateTimeFormatInfo().DateSeparator));

Вы должны сказать нам Почему Ввод текста использует этот формат. Если это потому, что пользователь входит в это таким образом, тогда вам нужно убедиться, что формат соответствует тому, что дано Thread.CurrentCulture.DateTimeFormat.ShortDatePattern. Анкет Изменение культуры (путем установки Thread.CurrentCulture) к соответствующему значению решит вашу проблему.

Если вы должны проанализировать вход, независимо от того, в каком формате он находится, то вам нужно сначала сделать какую -то ручную обработку (возможно, удалите пространства и другие символы разделителя с ввода с string.Replace) и затем попытайтесь проанализировать дату, используя DateTime.ParseExact и известная строка формата.

Но все зависит от Почему У ввода есть этот формат, и почему текущая культура вашего приложения не соответствует ему.

Вы можете попробовать это, Tryparse избегает исключений для анализа. Затем вам просто нужен результат проверки, чтобы убедиться, что он анализировал.

DateTime datuMDokumenta;
bool result = DateTime.TryParse(txtDatumDokum.Text, out datuMDokumenta);

Вам нужно будет определить, является ли это хорошим решением для вашего приложения.

Смотрите этот пример:http://msdn.microsoft.com/en-us/library/ch92fbc1.aspx

Судя по дате, которую вы дали, вам необходимо включить культуру, DE-DE принимает даты 01.01.11. как это:

using System.Globalization;

DateTime datuMDokumenta;
bool result = DateTime.TryParse(txtDatumDokum.Text, CultureInfo.CreateSpecificCulture("de-DE"), DateTimeStyles.None, out datuMDokumenta);

Список культур можно найти здесь, выберите соответствующий для вас:http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo%28v=vs.71%29.aspx

Плюс здесь в том, что этот код немного больше работы, но его очень трудно сломать. Предполагая, что вы используете бесплатную текстовую запись в текстовом поле, вы не хотите бросать исключения.

Да, вы должны проанализировать дату ввода в текущей культуре.

string[] format = new string[] { "dd.MM.yyyy" };
string value = "09.09.2011";
DateTime datetime;

if (DateTime.TryParseExact(value, format, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.NoCurrentDateDefault, out datetime))
      //Valid
else
     //Invalid

Datetime dt = convert.todatetime (txtdatumdokum.text)

Это правильно ... нет Isssue

Во время вызова пустыней в рамках Compact Framework 3.5 у меня раньше было неожиданное поведение.

Я преобразовал из использования классов сериализации OpenNetCF в класс сериализации Framework XML. При этом формат времени по умолчанию изменилось, а порядок имущества/публичных членов. Короче говоря, я раскрыл текстовое свойство, которое преобразует мои время даты обратно в формат, который ожидает мое приложение VB6.

            Dim dumbDate As New Date
            Dim formats() As String = {"yyyy-MM-ddTHH:mm:ss.fffzzz", _
                                       "yyyy-MM-dd HH:mm:ss:fffffffzzz"}

            _datetimeTaken = dumbDate.ParseExact(value, formats, CultureInfo.InvariantCulture, DateTimeStyles.None)

            ' There is something wrong with compact framework during the Serialization calls. 
            ' calling the shared method Date.Parse or Date.ParseExact does not produce the same
            ' result as calling a share method on an instance of Date. WTF?!?!?!
            ' The below will cause a "Format" exception.
            '_datetimeTaken = Date.ParseExact(value, formats, CultureInfo.InvariantCulture, DateTimeStyles.None)

Date.blah не работает. Dumbdate.blah работает. странный.

ваш код:

DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum.Text);

Попробуйте изменить это на:

DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum);

и когда вы печатаете date/time

Печать DatumDokumenta.Text

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top