Это сложная проблема. Я попробовал:
try
{
DateTime.Now.ToString(tmpFormatSpec);
}
catch (Exception)
{
// the format spec is known to be bad
}
Проблема в том, что шаблоны формата даты настолько гибкие. Даже вещи, которые не отображают информацию о дате, разрешены (и не обнаруживаются моим примером кода):
DateTime.Now.ToString("bla"); // no exception raised
См. Этот другой пост SO для еще лучшего способа (я еще не пробовал).
Также см. Это обсуждение проблемы с комментариями Дж. Скита.