2013-11-01 2 views
0

Я пытаюсь преобразовать строку в DateTime. Код выглядит следующим образом:Форматирование пользовательского формата до DateTime

DateTime.Parse("20131101T210705.282Z").ToShortTimeString() 

Я получаю исключение формата.

Я пробовал предоставить следующий формат «yyyyMMddTssmmhh.fffz», но получил такое же исключение. Код выглядел следующим образом:

DateTime dt; 
if (DateTime.TryParseExact("20131101T210705.282Z", 
          "yyyyMMddTssmmhh.fffz", 
          new CultureInfo("en-US"), 
          DateTimeStyles.None, 
          out dt)) 
    return dt.ToShortTimeString(); 

В этом случае код не анализирует строку.

ответ

0

Это может быть один из способов разбора.

var timeStamp = "20131101T210705.282Z"; 
    var datetime = timeStamp.Split(new[] { 'T' ,'.'}); 
    DateTime dt1; 


    if (DateTime.TryParseExact(datetime[0], 
        new string[] { "yyyyMMdd" }, 
        new CultureInfo("en-US"), 
        DateTimeStyles.None, 
        out dt1)) 
    { 
    Console.WriteLine(dt1.ToShortDateString()); 
    } 

    DateTime dt2; 


    if (DateTime.TryParseExact(datetime[1], 
        new string[] { "ssmmhh" }, 
        new CultureInfo("en-US"), 
        DateTimeStyles.None, 
        out dt2)) 
    { 
    Console.WriteLine(dt2.ToShortTimeString()); 
    } 

    Console.WriteLine(dt1.ToShortDateString() + " " + dt2.ToShortTimeString()); 
    Console.ReadLine(); 
+0

Проблема с этим кодом заключается в том, что нет способа распознать время AM или PM. –

1

Попробуйте это:

DateTime dt; 
    if (DateTime.TryParseExact("20131101T210705.282Z", 
           "yyyyMMddTssmmhh.fffZ", 
           new CultureInfo("en-US"), 
           DateTimeStyles.None, 
           out dt)) 
     return dt.ToShortDateString() + " " + dt.ToShortTimeString(); 
+0

Вы попробовали этот код? Я могу видеть, что наши аргументы для TryParseExact() - это то же самое, что означает, что условие будет терпеть неудачу. –

+0

Я чувствую, что вы даете неверный формат для TryParseExact() as -> 20131101T210705.282Z! = YyyyMMddTssmmhh.fffz –

+0

Да, я борюсь с форматом. Я сделал это, используя диаграмму, представленную на MSDN. Какой правильный формат? –

0

Формат был просто некорректным. Приведенное значение метрики не указывает, где часы, так как все значения (часы, минуты и секунды) меньше 24. Следующий код работает правильно.

DateTime.TryParseExact(value, 
         "yyyyMMddTHHmmss.fffZ", 
         CultureInfo.InvariantCulture, 
         DateTimeStyles.None, 
         out dt) 

Учитывая этот фирменный формат, часы в формате 24 часа и на первом месте. Тест с этого утра дал следующее значение: 20131106T162733.032Z. Я могу проверить этот проприетарный формат, потому что мы работаем в одной компании. :)

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