Ошибка DateTime FormatException - PullRequest
       20

Ошибка DateTime FormatException

3 голосов
/ 08 сентября 2011
DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum.Text);

txtDatumDokum. Текст похож на «09.09.2011».

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

Ответы [ 8 ]

3 голосов
/ 08 сентября 2011

Попробуйте DateTime.ParseExact со строкой формата дд.ММ.гггг

 DateTime.ParseExact(txtDatumDokum.Text, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None);
1 голос
/ 08 сентября 2011

Нехорошо видеть, в любом случае попробуйте это:

string s = "09.09.2011";
DateTime dt = Convert.ToDateTime(
    s.Replace(".",
    new System.Globalization.DateTimeFormatInfo().DateSeparator));
0 голосов
/ 09 апреля 2013

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

Я перешел от использования классов сериализации OpenNETCF к классу сериализации XML-инфраструктуры. При этом формат времени по умолчанию был изменен и порядок свойств / открытых членов. Короче говоря, я раскрыл свойство text, которое преобразует мои даты и назад в формат, ожидаемый моим приложением 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 работает. странно.

0 голосов
/ 08 сентября 2011

DateTime dt = Convert.ToDateTime (txtDatumDokum.Text)

Это верно ... нет вопроса

0 голосов
/ 08 сентября 2011

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

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
0 голосов
/ 08 сентября 2011

Вы можете попробовать это, 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

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

0 голосов
/ 08 сентября 2011

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

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

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

0 голосов
/ 08 сентября 2011

ваш код:

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

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

DateTime datuMDokumenta = Convert.ToDateTime(txtDatumDokum);

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

печать данныхMDokumenta.Text

...