TryParse не работает должным образом для преобразования даты соединения, например 270619

Проблема заключается в преобразовании случайного формата (08.12.12-08-2019/12AUG/120819 и т. д.) в DateTime. Поскольку формат не фиксирован, я использую TryParse, он работает для обычных случаев, но не для «120819».

string text="270619";

DateTime dt=new DateTime();

Thread.CurrentThread.CurrentCulture=CultureInfo.GetCultureInfo("en-IN");

var result=
DateTime.TryParse(text,CultureInfo.CurrentCulture,DateTimeStyles.None,out dt);

Console.WriteLine(dt);

Ожидаемая дата должна быть 27-06-2019 00:00:00

Изменить: в настоящее время я использую форматы = {"ddMMyy", "ddMMyyyy"} и он работает, но TryParseExact не работает для другого формата, такого как dd-MM-yyyy. Думаю, мне нужно записать туда все возможные форматы. Или используйте if else case, используя как TryParse, так и TryParseExact.


person Shubham Tyagi    schedule 12.08.2019    source источник
comment
Как он может разобрать это, не зная, что такое формат? 120819 может быть 12 августа 2019 года или 8 декабря 2019 года, в зависимости от того, кого вы спросите (это может быть, конечно, 1919, но это другой вопрос). Единственный способ — указать формат: ддммгг или ммддгг.   -  person Tim Rutter    schedule 12.08.2019
comment
TryParse не угадывает больше, чем Parse, просто не генерирует исключения. Используйте TryParseExact и передайте соответствующий формат. См. дубликат (один из многих, этот вопрос обычно задают раз в день), и Microsoft Docs: Пользовательские строки формата даты и времени.   -  person CodeCaster    schedule 12.08.2019
comment
Какую дату вы на самом деле получаете? А что есть в result если отлаживать?   -  person Peter Smith    schedule 12.08.2019
comment
если формат не фиксированный, то его в принципе не разобрать.   -  person Tim Rutter    schedule 12.08.2019
comment
@PeterSmith это дата по умолчанию 01-01-0001 00:00:00   -  person Shubham Tyagi    schedule 12.08.2019
comment
@TimRutter формат всегда будет похож на дату-месяц-год, но в разных форматах, таких как ддммгг, ддммгггг, ддммм и т. д.   -  person Shubham Tyagi    schedule 12.08.2019


Ответы (1)


Попробуйте TryParseExact и укажите свой формат ddMMyy следующим образом:

DateTime.TryParseExact(text, "ddMMyy", System.Globalization.CultureInfo.CurrentCulture,
                                      System.Globalization.DateTimeStyles.None, out dt);
person dvo    schedule 12.08.2019
comment
В настоящее время я использую formats={ddMMyy,ddMMyyyy} и он работает, но TryParseExact не работает для другого формата, такого как dd-MM-yyyy. - person Shubham Tyagi; 12.08.2019
comment
Вам нужно иметь все возможности в вашем массиве formats. Относитесь к ним как к вашим принятым форматам. В противном случае вы можете использовать Regex для самостоятельного форматирования строки, прежде чем пытаться ее проанализировать, но это дополнительный шаг. - person dvo; 12.08.2019
comment
Спасибо @dvo. Я мог бы просто использовать TryParse и TryParseExact один за другим, чтобы избежать написания всех форматов, потому что их много. - person Shubham Tyagi; 12.08.2019
comment
Звучит как очень подверженный ошибкам подход ко мне. Почему у вас так много возможностей форматирования? - person Tim Rutter; 12.08.2019