Форматирующие строки
86C# --- Руководство по C# --- Форматирующие строки
Если вы хотите, чтобы разрабатываемые классы были дружественными к пользователю, они должны предлагать средства для отображения своих строковых представлений в любом из форматов, которые могут понадобиться пользователю. В исполняющей среде .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();
}
}
}
