Какое отношение объекта iformatprovider делать?


Я играл с Datetime.Метод ParseExact, и он хочет IFormatProvider...

Он работает с вводом null, но что именно он делает?

8 71

8 ответов:

в дополнение к ответу Яна Бойда:

и CultureInfo реализует этот интерфейс и может быть использован в вашем случае. Таким образом, вы можете проанализировать французскую строку даты, например; вы можете использовать

var ci = new CultureInfo("fr-FR");
DateTime dt = DateTime.ParseExact(yourDateInputString, yourFormatString, ci);

The IFormatProvider интерфейс обычно реализуется для вас с помощью CultureInfo класса, например:

  • CultureInfo.CurrentCulture
  • CultureInfo.CurrentUICulture
  • CultureInfo.InvariantCulture
  • CultureInfo.CreateSpecificCulture("de-CA") //German (Canada)

интерфейс является шлюзом для функции, чтобы получить набор специфичных для языка и региональных параметров данных из языка и региональных параметров. Два общедоступных объекта культуры, которые IFormatProvider можно запросить для являются:

  • DateTimeFormatInfo
  • NumberFormatInfo

как это обычно работает, вы спрашиваете IFormatProvider чтобы дать вам

передача null как IFormatProvider это не правильный способ сделать это. Если у пользователя есть пользовательский формат даты/времени на своем ПК, у вас будут проблемы с синтаксическим анализом и преобразованием в строку. Я только что исправил ошибку, когда кто-то передал null в качестве IFormatProvider при преобразовании в строку.

вместо этого вы должны использовать CultureInfo.InvariantCulture

неправильно:

string output = theDate.ToString("dd/MM/yy HH:mm:ss.fff", null);

правильно:

string output = theDate.ToString("dd/MM/yy HH:mm:ss.fff", CultureInfo.InvariantCulture);

вы можете посмотреть здесь http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx

посмотреть в разделе "Заметки" и есть пример.

IFormatProvider предоставляет информацию о культуре для рассматриваемого метода. DateTimeFormatInfo реализует IFormatProvider и позволяет указать формат, в котором вы хотите, чтобы ваша дата/время отображались. Примеры можно найти на соответствующих страницах MSDN.

By MSDN

платформа .NET Framework включает в себя следующее три предопределенные реализации IFormatProvider для предоставления специфичной для языка и региональных параметров информации, которая используется при форматировании или анализе числовых значений и значений даты и времени:

  1. The NumberFormatInfo класс, который предоставляет информацию, которая используется для форматирования чисел, таких как валюта, разделитель тысяч и десятичный разделитель символов для определенного языка и региональных параметров. Для информация о стандартных строк форматирования признан NumberFormatInfo объект и используется в операциях числового форматирования, см. Стандартные строки числового формата и пользовательские строки числового формата.
  2. The DateTimeFormatInfo класс, который предоставляет информацию, используемую для форматирования дат и времени, например символы разделителя даты и времени для определенного языка и региональных параметров или порядок и формат компонентов даты год, месяц и день. Для получения информации о стандартных строк форматирования признан DateTimeFormatInfo объект и используется в операциях числового форматирования, см. Стандартные строки формата даты и времени и пользовательские строки формата даты и времени.
  3. The CultureInfo класс, который представляет определенную культуру. Его GetFormat метод возвращает язык и региональные параметры NumberFormatInfo или DateTimeFormatInfo объект, в зависимости от того,CultureInfo объект используется в операции форматирования или синтаксического анализа, которая включает в себя числа или даты и время.

платформа .NET Framework также поддерживает пользовательское форматирование. Обычно это включает в себя создание класса форматирования, который реализует как IFormatProvider, так и ICustomFormatter. Экземпляр этого класса передается в качестве параметра в метод, который выполняет операции форматирования, такие как String.Format(IFormatProvider, String, Object[]).

The DateTimeFormatInfo класс реализует этот интерфейс, поэтому он позволяет управлять форматированием строк DateTime.