D>...строки в DateTime с заранее неизвестным форматом...
9.11.2001 — это 9-ое ноября или 11-ое сентября?
D>...чтобы гибко принимала строку?
Так что всё-таки придётся требовать от пользователя ввода даты в некотором заранее известном (с точностью до разделителей) формате. Советую использовать «истинно программистский» стандарт даты/времени
ISO 8601, и просить пользователя вводить данные в лексикографическом формате. В этом случае стандартные функции DateTime.Parse() и DateTime.TryParse() должны нормально работать:
var iso8601 = DateTime.Parse("2008-09-23T05:36:32.1234");
Console.WriteLine(iso8601);
var iso8601simple = DateTime.Parse("2008-09-23 05:36");
Console.WriteLine(iso8601simple);
var utc = DateTime.Parse("2008/03/19 19:57Z");
Console.WriteLine(utc);
var yetAnother = DateTime.Parse("2008.12.20");
Console.WriteLine(yetAnother);
var withMonth = DateTime.Parse("2008 Nov 20");
Console.WriteLine(withMonth);
var withMonthRus = DateTime.Parse("2008 Сентябрь 20");
Console.WriteLine(withMonthRus);