В прошлом я использовал код, подобный следующему (где expectedDateTimeFormats
- строки, соответствующие правилам для Строки пользовательского формата даты и времени ):
// Or use custom DateTimeFormatInfo objects
string[] expectedDateTimeFormats = new string[] {
"customFormat1",
"customFormat2",
"customFormatN",
};
// You could offer several overloads here, to accept other DateTimeStyles,
// InvariantCulture, CurrentUICulture, etc. - perhaps even a collection of
// CultureInfo objects to try
public DateTime TryParseDateString(string dateString, CultureInfo culture) {
try {
// first, try to parse given the specified culture's formats
return DateTime.Parse(dateString, culture);
}
catch (FormatException) {
// if that fails, try your custom formats
return DateTime.ParseExact(dateString,
expectedDateTimeFormats,
culture,
DateTimeStyles.None);
}
}
Если вы имеете дело с нестандартными сокращениями (например, «1 сентября 2009 года», как вы упомянули в комментарии), вам, возможно, придется создать пользовательский CultureInfo
или DateTimeFormatInfo
и определить их самостоятельно.
Я не знаю действительно хорошего списка «стандартных» пользовательских форматов (и / или связанных с ними DateTimeFormatInfo
определений) - если кто-то может найти тот, который он, безусловно, заслуживает того, чтобы быть принятым ответом. У меня больше нет доступа к тому, что использовала моя старая команда (и у меня все равно не было бы разрешения поделиться им :().