Там нет никакого способа, чтобы разобрать вашу строку, не изменяя его, потому что M
format specifierможет быть двумя цифрами, и он будет отображать для разбора 51
в виде месяца. Вот почему ваша операция выбрасывает FormatException
. То же самое с h
format specifier.
Вот почему нам нужно изменить строку из 515201483742AM
в 05152014083742AM
обеспечить M
спецификатор формата будет отображать 05
и h
спецификатор формата будет отображать 08
.
Вы можете использовать способ, например ;
public static DateTime? ParseDate_Mdyyyyhmmsstt(string date)
{
if (date == null)
return null;
if (date.Length < 14)
return null;
if (date.Length == 14)
date = date.Insert(0, "0").Insert(8, "0");
DateTime dt;
if (DateTime.TryParseExact(date, "Mdyyyyhmmsstt",
CultureInfo.InvariantCulture,
DateTimeStyles.None, out dt))
return dt;
return null;
}
И назовите это;
var dt = ParseDate_Mdyyyyhmmsstt("515201483742AM");
Console.WriteLine(dt.Value); // 15.05.2014 08:37:42
1: Я знаю, что это не элегантного решения, но оно работает в вашем случае, когда ваш месяц и час часть 1 цифра.
чтения: DateTime conversion from string C#
Не уверен, но, возможно, невозможно разобрать его с помощью традиционных методов Try/Parse. А также пользовательский парсер будет действительно сложным. Можете ли вы запросить менее неоднозначную строку ввода? – Steve
Не могли бы вы указать текущую дату и время в вашем формате? Как это будет выглядеть? – Frank
Я смею сказать, что это невозможно, например. если бы у вас была строка, начинающаяся с «115», не было бы способа сказать, будет ли это 15 января или 5 ноября. – Grx70