2009-10-08 2 views
6

Я пытаюсь проанализировать DateTime, с точной формой, принимаемой с клиентского ввода.DateTimeFormatInfo.InvariantInfo vs CultureInfo.InvariantCulture

Какой из них лучше

bool success = DateTime.TryParseExact(value, "dd-MMM-yyyy", 
    DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out dateTime); 

ИЛИ

bool success = DateTime.TryParseExact(value, "dd-MMM-yyyy", 
    CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime); 

Конечно, этот код внутри общего статического метода, который вызывается везде, где требуется разбор даты.

ответ

7

Если вы посмотрите на подпись для DateTime.TryParseExact, в качестве третьего аргумента требуется IFormatProvider. Оба значения DateTimeFormatInfo.InvariantInfo и CultureInfo.InvariantCulture реализуют этот интерфейс, поэтому вы фактически вызываете тот же метод на DateTime в обоих случаях.

Внутренне, если вы используете CultureInfo.InvariantCulture, его имущество DateTimeFormat вызывается для получения экземпляра DateTimeFormatInfo. Если вы используете DateTimeFormatInfo.InvariantInfo, это используется напрямую. Звонок DateTimeFormatInfo будет немного быстрее, поскольку он должен выполнять меньше инструкций, но это будет настолько незначительным, чтобы не иметь никакого значения (почти) всех случаев.

Основное различие между двумя подходами - синтаксис. Используйте то, что вы найдете наиболее ясным.

3

Они дадут те же результаты.
И очень маловероятно, что будет какая-то разница в производительности.

Так что используйте все, что вы считаете наиболее читаемым. Мой выбор был бы DateTimeFormatInfo.InvariantInfo за то, что он немного больше.

Смежные вопросы