Форматирующие строки
Если вы хотите, чтобы разрабатываемые классы были дружественными к пользователю, они должны предлагать средства для отображения своих строковых представлений в любом из форматов, которые могут понадобиться пользователю. В исполняющей среде .NET определен стандартный способ достижения этого — интерфейс IFormattable. Описание способа добавления этого важного свойства к пользовательским классам и структурам и представляет собой тему настоящей статьи.
Начнем с рассмотрения того, что происходит, когда форматная строка применяется к примитивному типу, а отсюда станет ясно, как следует включать спецификаторы формата для пользовательских классов и структур:
decimal d = 12.05667m; int i = 5; Console.WriteLine("Значение переменной d = {0:C}, а i = {1}",d,i);
Сама строка формата содержит большую часть отображаемого текста, но всякий раз, когда в нее должно быть вставлено значение переменной, в фигурных скобках указывается индекс. В фигурные скобки может быть включена и другая информация, относящаяся к формату данного элемента, например, та, что описана ниже:
-
Количество символов, которое займет представление элемента, снабженное префиксом-запятой. Отрицательное число указывает, что элемент должен быть выровнен по левой границе, а положительное — по правой. Если элемент на самом деле занимает больше символов, чем ему отведено форматом, он отображается полностью.
-
Спецификатор формата предваряется двоеточием. Это указывает, каким образом необходимо отформатировать элемент. Например, можно указать, должно ли число быть форматировано как денежное значение, либо его следует отобразить в научной нотации.
В следующей таблице перечислены часто используемые спецификаторы формата для числовых типов:
Спецификаторы формата для чисел
Спецификатор | Применяется к | Значение | Пример |
---|---|---|---|
C | Числовым типам | Символ местной валюты | $835.50 (США) £835.50 (Великобритания) 835.50р.(Россия) |
D | Только к целочисленным типам | Обычное целое | 835 |
E | Числовым типам | Экспоненциальная нотация | 8.35Е+002 |
F | Числовым типам | С фиксированной десятичной точкой | 835.50 |
G | Числовым типам | Обычные числа | 835.5 |
N | Числовым типам | Формат чисел, принятый в данной местности | 4,384.50 (Великобритания/США) 4 384,50 (континентальная Европа) |
P | Числовым типам | Процентная нотация | 835,000.00% |
X | Только к целочисленным типам | Шестнадцатеричный формат | 1a1f |
Стоит отметить, что полный список спецификаторов формата значительно длинее, поскольку другие типы данных добавляют собственные спецификаторы.
Форматирование даты и времени
Помимо числовых значений, форматированию нередко подлежит и другой тип данных: DateTime. Это структура, представляющая дату и время. Значения даты и времени могут отображаться самыми разными способами.
Форматирование даты и времени осуществляется с помощью спецификаторов формата. Конкретное представление даты и времени может отличаться в силу региональных и языковых особенностей и поэтому зависит от настройки параметров культурной среды. Спецификаторы формата даты и времени сведены в следующей таблице:
Спецификаторы формата для дат
Спецификатор | Формат |
---|---|
D | Дата в длинной форме |
d | Дата в краткой форме |
F | Дата и время в длинной форме |
f | Дата и время в краткой форме |
G | Дата — в краткой форме, время — в длинной |
g | Дата и время — в краткой форме |
М | Месяц и день |
m | То же, что и М |
O | Формат даты и времени, включая часовой пояс. Строка, составленная в формате О, может быть преобразована обратно в эквивалентную форму вывода даты и времени. Это так называемый "круговой" формат |
R | Дата и время в стандартной форме по Гринвичу |
s | Сортируемый формат представления даты и времени |
T | Время в длинной форме |
t | Время в краткой форме |
U | Длинная форма универсального представления даты и времени; время отображается как универсальное синхронизированное время (UTC) |
u | Краткая форма универсального представления даты и времени |
Y | Месяц и год |
В приведенном ниже примере программы демонстрируется применение спецификаторов формата даты и времени:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { DateTime myDate = DateTime.Now; Console.WriteLine("Дата в формате d: {0:d}\nВ формате D: {0:D}",myDate); Console.WriteLine("Дата в формате f: {0:f}\nВ формате F: {0:F}", myDate); Console.WriteLine("Дата в формате g: {0:g}\nВ формате G: {0:G}", myDate); Console.WriteLine("Дата в формате m: {0:m}\nВ формате M: {0:M}", myDate); Console.WriteLine("Дата в формате r: {0:r}\nВ формате R: {0:R}", myDate); Console.WriteLine("Дата в формате o: {0:o}\nВ формате O: {0:O}", myDate); Console.WriteLine("Дата в формате s: {0:s}", myDate); Console.WriteLine("Дата в формате t: {0:t}\nВ формате T: {0:T}", myDate); Console.WriteLine("Дата в формате u: {0:u}\nВ формате U: {0:U}", myDate); Console.WriteLine("Дата в формате y: {0:y}\nВ формате Y: {0:Y}", myDate); Console.ReadLine(); } } }
Комментарии