2013-05-09 3 views
3

Ну я пытаюсь разобрать, что ДейтDateTime ParseExact Выдает Исключение

5/10/2013 002704

 var stt = "5/10/2013 002704"; 
     result = DateTime.ParseExact(stt, "dd-MM-yyyy HHmmss", CultureInfo.InvariantCulture); 

, но я получаю эту Exception

Строка была n ot признано действительным DateTime.

Однако !, этот код работает, чтобы разобрать только время *without date*

 var stt = "002704"; 
     result = DateTime.ParseExact(stt, "HHmmss", CultureInfo.InvariantCulture); 

Ну я надеюсь, что кто-то помогает мне с этой проблемой, и заранее спасибо ...

ПОДСКАЗКА: ЭТО ТАКЖЕ НЕИСПРАВНОСТИ

var stt = "5/10/2013 002704"; 
    result = DateTime.ParseExact(stt, "dd/MM/yyyy HHmmss", CultureInfo.InvariantCulture); 

Ну, это работает! благодаря чему каждый помог мне здесь за его очень приятную помощь, которую я очень ценю. Также я буду учитывать проблему XY в следующий раз: D.

+2

Вы используете '/' разграничить дату в выборочных данных, а затем проверка '-' в разборе. –

+0

cus я попытался изменить его 'to /' не повезло –

+0

Нет, я делаю. Что вы ожидаете больше? ... Это код, который выполняет функцию, и это код, который выдает исключение, и у вас есть время, когда я пытаюсь разобрать! –

ответ

5

Ах, вы делаете разбор точно с dd но переходящая в d. Измените строку ввода на "05/10/2013 002704" и убедитесь, что вы используете / в своем разделителе.

var stt = "05/10/2013 002704"; 
result = DateTime.ParseExact(stt, "dd/MM/yyyy HHmmss", CultureInfo.InvariantCulture); 

Редактировать

К сожалению, я должен был принять телефонный звонок и не мог закончить свою мысль. Вместо использования dd вы, вероятно, захотите d. Он будет работать с 05/10/2013 или любым числом до 31 (как указано в комментариях к вопросу). Кроме того, я думаю, @DanJ сделал замечательную ссылку на комментарий в этом случае.

Короткий ответ, если вы собираетесь использовать Анализировать * Exact *(), то вам лучше быть уверенным, что строка вы поставляя матчи спецификатор формата.

Если вы собираетесь двигаться вперед ParseExact, то вы должны использовать:

result = DateTime.ParseExact(stt, "d/MM/yyyy HHmmss", CultureInfo.InvariantCulture); 
+0

, как изменить его в соответствии с обоими ? –

+0

или atleast, как я могу получить дату в этом формате с DateTime.Now –

+0

'd' вместо' dd' - это то, что вы хотите. –

2

во-первых, вы разбора с форматом строки, содержащей - (ДД-ММ-ГГГГ) в то время как строка содержит / (5/10/2013).

другое дело, в тот же день компонент должен быть d, не dd, потому что это не 505.

var stt = "5/10/2013 002704"; 
    result = DateTime.ParseExact(stt, "d/MM/yyyy HHmmss", CultureInfo.InvariantCulture); 
+0

не удается попробовать это самостоятельно –

+0

@RuneS обновил ответ, сделайте это сейчас –

+0

, но что, если дни 10/10/2013 ... потому что я не использую статическую дату, которую она должна меняться как время выполнения программы в –

3

У вас есть две вещи неправильно:

  1. Вы используете dd за день месяца, который ожидает ведущий 0, если день - это одна цифра. Вместо этого используйте d.
  2. Как вы уже говорили, вы используете - в своем формате, но / в ваших входных данных.
+0

как принять его как dd, так и d –

+0

'd' примет как' 5', так и '05'. – adrianbanks

2

Почему все спорят о том, должно ли оно быть «d» против «dd» или «M» против «ММ»?

Вы все можете иметь свой торт и съесть его тоже!

Все они действительны, поэтому относитесь к ним как к действительным. Создайте ARRAY разрешенных форматов и передайте это DateTime.TryParseExact(). Теперь все эти случаи будут рассматриваться, как вы ожидали бы их:

 DateTime result; 
     var stt = "5/10/2013 002704"; 
     string[] formats = { "d/M/yyyy HHmmss", "dd/MM/yyyy HHmmss", "d/MM/yyyy HHmmss", "dd/M/yyyy HHmmss" }; 
     if (DateTime.TryParseExact(stt, formats, null, System.Globalization.DateTimeStyles.None, out result)) 
     { 
      // ... do something with "result" in here ... 
      Console.WriteLine(result.ToString()); 
     } 
     else 
     { 
      // ... parse failed ... 
     } 
Смежные вопросы