Какое отношение объекта iformatprovider делать?
Я играл с Datetime.Метод ParseExact, и он хочет IFormatProvider...
Он работает с вводом null, но что именно он делает?
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.
проверить 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.