Какое отношение объекта iformatprovider делать?
Я играл с Datetime.Метод ParseExact, и он хочет IFormatProvider...
Он работает с вводом null, но что именно он делает?
8 ответов:
в дополнение к ответу Яна Бойда:
и
CultureInfoреализует этот интерфейс и может быть использован в вашем случае. Таким образом, вы можете проанализировать французскую строку даты, например; вы можете использоватьvar ci = new CultureInfo("fr-FR"); DateTime dt = DateTime.ParseExact(yourDateInputString, yourFormatString, ci);
The
IFormatProviderинтерфейс обычно реализуется для вас с помощьюCultureInfoкласса, например:
CultureInfo.CurrentCultureCultureInfo.CurrentUICultureCultureInfo.InvariantCultureCultureInfo.CreateSpecificCulture("de-CA") //German (Canada)интерфейс является шлюзом для функции, чтобы получить набор специфичных для языка и региональных параметров данных из языка и региональных параметров. Два общедоступных объекта культуры, которые
IFormatProviderможно запросить для являются:
DateTimeFormatInfoNumberFormatInfoкак это обычно работает, вы спрашиваете
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.
проверить http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx для API.
By MSDN
платформа .NET Framework включает в себя следующее три предопределенные реализации IFormatProvider для предоставления специфичной для языка и региональных параметров информации, которая используется при форматировании или анализе числовых значений и значений даты и времени:
- The
NumberFormatInfoкласс, который предоставляет информацию, которая используется для форматирования чисел, таких как валюта, разделитель тысяч и десятичный разделитель символов для определенного языка и региональных параметров. Для информация о стандартных строк форматирования признанNumberFormatInfoобъект и используется в операциях числового форматирования, см. Стандартные строки числового формата и пользовательские строки числового формата.- The
DateTimeFormatInfoкласс, который предоставляет информацию, используемую для форматирования дат и времени, например символы разделителя даты и времени для определенного языка и региональных параметров или порядок и формат компонентов даты год, месяц и день. Для получения информации о стандартных строк форматирования признанDateTimeFormatInfoобъект и используется в операциях числового форматирования, см. Стандартные строки формата даты и времени и пользовательские строки формата даты и времени.- The
CultureInfoкласс, который представляет определенную культуру. ЕгоGetFormatметод возвращает язык и региональные параметрыNumberFormatInfoилиDateTimeFormatInfoобъект, в зависимости от того,CultureInfoобъект используется в операции форматирования или синтаксического анализа, которая включает в себя числа или даты и время.платформа .NET Framework также поддерживает пользовательское форматирование. Обычно это включает в себя создание класса форматирования, который реализует как IFormatProvider, так и ICustomFormatter. Экземпляр этого класса передается в качестве параметра в метод, который выполняет операции форматирования, такие как
String.Format(IFormatProvider, String, Object[]).
The DateTimeFormatInfo класс реализует этот интерфейс, поэтому он позволяет управлять форматированием строк DateTime.