2014-12-14 2 views
1

У меня есть 14 номер с 2-мя персонажи AM/PM, Я хочу, чтобы преобразовать их в DATETIMEПреобразование 14 числа в DateTime в C#

, например: 515201483742AM

Я попробовал этот код:

DateTime result = 
DateTime.ParseExact(dateString, "Mdyyyyhmmsstt", 
CultureInfo.CreateSpecificCulture("en-US")); 

выход ошибки в формате

, где находится 515201483742AM5 15 2014 8 37 42 AM

месяц M с не ведущим 0

день также d без ведущих 0

часов же и tt для AM

+1

Не уверен, но, возможно, невозможно разобрать его с помощью традиционных методов Try/Parse. А также пользовательский парсер будет действительно сложным. Можете ли вы запросить менее неоднозначную строку ввода? – Steve

+1

Не могли бы вы указать текущую дату и время в вашем формате? Как это будет выглядеть? – Frank

+3

Я смею сказать, что это невозможно, например. если бы у вас была строка, начинающаяся с «115», не было бы способа сказать, будет ли это 15 января или 5 ноября. – Grx70

ответ

0

Там нет никакого способа, чтобы разобрать вашу строку, не изменяя его, потому что 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#

+1

Несомненно, он работает для этого конкретного входа, но для ввода '' 1215201483742AM'' (который равен 15.12.2014 08:37:52) он вернет 'null' ... – Grx70

+0

@ Grx70 Конечно, он вернет' null', потому что '' 1215201483742AM ".Length' -' 15'. Вот почему я сказал ** в вашем случае **. Для вашего примера OP может быть пропущен 'date.Insert (0,« 0 »)' part, потому что часть месяца вашей строки равна «2», но ему все равно нужно добавить 'Insert (8,« 0 »)' part, потому что часовая часть все еще '1'. –

+0

Вы правы, но задаете ввод длины 15, как вы можете определить, следует ли пропускать 'date.Insert (0," 0 ")' или '.Insert (8," 0 ")'? – Grx70

0

использование двойной "ММ" и "дд" Вместо одного "М" и "д"

DateTime result = DateTime.ParseExact(dateString,"MMddyyyyhmmsstt",CultureInfo.CreateSpecificCulture("en-US")); 

он будет работать.

 Смежные вопросы

  • Нет связанных вопросов^_^