Существует множество способов сделать это, это действительно зависит от того, насколько регулярно называются ваши файлы - всегда ли какой-нибудь ненужный текст, сопровождаемый рекламой, а затем год?
РазместитьЕще 10 разных примеров, если вы хотите более индивидуальный совет.Вот способ, который вы опубликовали:
DateTime.TryParseExact(
Path.GetFileNameWithoutExtension(b.DisplayName.Substring(b.DisplayName.IndexOf('-')+1)),
"yyyy_MM_dd-H_mm_ss",
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None,
out dateVal
);
При этом используется подстрока с одним аргументом (без длины), чтобы удалить все после первого дефиса до конца строки, и GetFileNameWithoutExtension, чтобы удалить.xml - это фактически превращает anythinghere-2000_01_01-00_00_00.xml
в 2000_01_01-00_00_00
, готовый к синтаксическому анализу
Я мог бы также пойти на вещь типа .Remove("last index of period")
, но это немного запутанно, потому что вы должны вычесть начальный индексдефиса и т. д.
М.Дж.Вилль о разбиении на дефис также является хорошим - вы можете разделить, затем взять индексы [1]
и [2]
и соединиться, а затем снова объединиться для разбора ..
Наконец, не забывайте, что сам файл может иметь дату создания, которая уже является хорошим кандидатом на дату создания, а не имя файла (которое может быть искажено людьми), если он не был где-то передан и повторно-saved.Взгляните на свойство FileInfo.CreationTime
для этого - https://docs.microsoft.com/en-us/dotnet/api/system.io.fileinfo?view=netframework-4.8