DateTime Formatexception Ошибка
-
27-10-2019 - |
Вопрос
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