Поставщики форматов являются подключаемыми, но, насколько мне известно, вы не можете настроить поставщика форматов по умолчанию для данного типа. Методы, которые принимают строки формата по соглашению, обычно также имеют перегрузку, которая принимает IFormatProvider. Вы можете реализовать два класса, такие как MyFormatProvider: IFormatProvider и MyCustomFormatter: ICustomFormatter.
Когда обрабатывается строка формата, такая как "{0: dd} {0: or} {0: MMM} {0: yyyy}", ваш ICustomFormatter будет вызываться 4 раза, с "dd" или "," MMM "и" гггг "в качестве параметров, чтобы можно было форматировать каждую часть отдельно. Вам просто нужно обработать случай «или», а остальное передать поставщику формата по умолчанию.
Однако при форматировании вызывающей стороне все равно потребуется передать экземпляр вашего поставщика настраиваемого формата. Например:
string str = String.Format(MyFormatProvider.Default, "{0:dd}{0:or} {0:MMM} {0:yyyy}", date);
Насколько я знаю, от этого требования никуда не деться. Некоторое время назад я искал лучший способ, когда я создал «относительную» строку формата DateTime, которая отображала DateTimes, например, «1 час назад», «3 дня назад» и т. Д. Не мог найти способа избежать необходимости явно передать мой пользовательский IFormatProvider.
person
Josh
schedule
13.10.2010