C# 4.0 полное руководство - 2011 - Герберт Шилдт
Шрифт:
Интервал:
Закладка:
Символ-заполнитель
Назначение
tt
A.M. или P.M.
У
Год в виде двух цифр, если недостаточно одной
УУ
Год в виде двух цифр. Числовые значения в пределах от 1 до 9 дополняются начальным нулем
УУУ
Год в виде трех цифр
УУУУ
Год в виде четырех цифр
УУУУУ
Год в виде пяти цифр
z
Смещение часового пояса в часах
zz
Смещение часового пояса в часах. Числовые значения в пределах от 1 до 9 дополняются начальным нулем
zzz
Смещение часового пояса в часах и минутах
:
Разделитель для составляющих значения времени
/
Разделитель для составляющих значения даты
%fmt
Стандартный формат, соответствующий спецификатору формата fmt
Глядя на табл. 22.8, можно заметить, что символы-заполнители d, f, g, m, М, s и t выполняют ту же функцию, что и аналогичные символы-заполнители из табл. 22.7. Вообще говоря, если один из этих символов указывается отдельно, то он интерпретируется как спецификатор формата. В противном случае он считается символом-заполнителем. Поэтому если требуется указать несколько таких символов отдельно, но интерпретировать их как символы-заполнители, то перед каждым из них следует поставить знак %.
В приведенном ниже примере программы демонстрируется применение нескольких форматов даты и времени.
// Отформатировать дату и время, используя специальные форматы, using System;
class CustomTimeAndDateFormatsDemo { static void Main() {
DateTime dt = DateTime.Now;
Console.WriteLine("Время: {0:hh:mm tt}", dt) ;
Console.WriteLine("Время в 24-часовом формате: {0:HH:mm}", dt) ;
Console.WriteLine("Дата: {0:ddd МММ dd, yyyy}", dt) ;
Console.WriteLine("Эра: {0:gg}", dt) ;
Console.WriteLine("Время в секундах: " +
"{0:HH:mm:ss tt}", dt) ;
Console.WriteLine("День месяца в формате m: {0:m}", dt);
Console.WriteLine("Минуты в формате m: {0:%m}", dt);
Вот к какому результату приводит выполнение этой программы (опять же все зависит от конкретных настроек языковых и региональных параметров локализации базового программного обеспечения).
Время: 11:19 AM
Время 24-часовом формате: 11:19 Дата: Thu Feb 11, 2010 Эра: A.D.
Время в секундах: 11:19:40 AM День месяца в формате m: February 11 Минуты в формате ш: 19
Форматирование промежутков времени
Начиная с версии 4.0, в среде .NET Framework появилась возможность форматировать объекты типа Time Span — структуры, представляющей промежуток времени. Объект типа Time Span может быть получен самыми разными способами, в том числе и в результате вычитания одного объекта типа DateTime из другого. И хотя форматировать объекты типа Time Span приходится нечасто, о такой возможности все же стоит упомянуть вкратце.
По умолчанию в структуре Time Span поддерживаются три стандартных спецификатора формата даты и времени: с, g и G. Они обозначают инвариантную форму промежутка времени, короткую и длинную форму с учетом культурной среды соответственно (последняя форма всегда включает в себя дни). Кроме того, в структуре Time Span поддерживаются специальные спецификаторы формата даты и времени, приведенные в табл. 22.9. Вообще говоря, если один из этих спецификаторов используется в отдельности, его нужно предварить символом %.
Таблица 22.9. Символы-заполнители специального формата промежутка времени
Символ-заполнитель
Назначение
d, dd,
ddd, dddd,
Целые дни. Если указано несколько символов-заполнителей
ddddd,
dddddd,
ddddddd
d, то отображается, по крайней мере, указанное количество цифр с начальными нулями, если требуется
h, hh
Часы (не считая тех, что составляют часть целого дня). Если указано hh, то отображаются две цифры с начальными нулями, если требуется
m, mm
Минуты (не считая тех, что составляют часть целого часа). Если указано mm, то отображаются две цифры с начальными нулями, если требуется
s, ss
Секунды (не считая тех, что составляют часть целой минуты). Если указано ss, то отображаются две цифры с начальными нулями, если требуется
f, ff,
fff, ffff,
Дробные доли секунды. Количество символов-заполнителей
fffff,
ffffff,
fffffff
f обозначает точность представления, а остальные цифры отбрасываются
F, FF,
FFF, FFFF,
Дробные доли секунды. Количество символов-заполнителей
FFFFF,
FFFFFF,
FFFFFFF
F обозначает точность представления, а остальные цифры отбрасываются и конечные нули не отображаются
В приведенной ниже программе демонстрируется форматирование объектов типа TimeSpan на примере отображения времени, которое приблизительно требуется для вывода на экран 1000 целых значений в цикле for.
// Отформатировать объект типа TimeSpan.
using System;
class TimeSpanDemo { static void Main() {
DateTime start = DateTime.Now;
// Вывести числа от 1 до 1000. for(int i = 1; i <= 1000; i++) {
Console.Write(i + " ");
if((i % 10) == 0) Console.WriteLine();
}
Console.WriteLine();
DateTime end = DateTime.Now;
TimeSpan span = end - start;
Console.WriteLine("Время выполнения: {0:c}", span);
Console.WriteLine("Время выполнения: {0:g}", span);
Console.WriteLine("Время выполнения: {0:G}", span);
Console.WriteLine("Время выполнения: 0.{0:fff} секунды", span);
}
}
Выполнение этой программы приводит к следующему результату, который и в этом случае зависит от конкретных настроек языковых и региональных параметров локализации базового программного обеспечения, а также от загрузки системы задачами и ее быстродействия.
981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 Время выполнения: 00:00:00.0140000 Время выполнения: 0:00:00.014 Время выполнения: 0:00:00:00.0140000 Время выполнения: 0.014 секунды
Форматирование перечислений
В C# допускается также форматировать значения, определяемые в перечислении. Вообще говоря, значения из перечисления могут отображаться как по имени, так и по значению. Спецификаторы формата перечислений сведены в табл. ”22.10. Обратите особое внимание на форматы G и F. Перед перечислениями, которые должны представлять битовые поля, следует указывать атрибут Flags. Как правило, в битовых полях хранятся значения, обозначающие отдельные двоичные разряды и упорядоченные по степени числа 2. При наличии атрибута Flags имена всех битовых составляющих форматируемого значения, если, конечно, это действительное значение, отображаются с помощью спецификатора G. А с помощью спецификатора F отображаются имена всех битовых составляющих форматируемого значения, если оно составляется путем логического сложения по ИЛИ двух или более полей, определяемых в перечислении.
Таблица 22.10. Спецификаторы формата перечислений Спецификатор Назначение
D Отображает значение в виде десятичного целого числа
d То же, что и D
F Отображает имя значения. Если это значение можно создать путем логиче
ского сложения по ИДИ двух или более полей, определенных в перечислении, то данный спецификатор отображает имена всех битовых составляющих заданного значения, причем независимо оттого, задан атрибут Flags или нет
f То же, что и F
G Отображает имя значения. Если перед форматируемым перечислением ука
зывается атрибут Flags, то данный спецификатор отображает имена всех битовых составляющих заданного значения, если, конечно, это допустимое значение g То же, что и G
X Отображает значение в виде шестнадцатеричного целого числа. Для отобра
жения как минимум восьми цифр форматируемое значение дополняется (при необходимости) начальными нулями х_То же, что и X_
В приведенной ниже программе демонстрируется применение спецификаторов формата перечислений.
// Отформатировать перечисление.
using System;
class EnumFmtDemo {
enum Direction { North, South, East, West }
[Flags] enum Status { Ready=0xl, OffLine=Ox2,
Waiting=0x4, TransmitOK=Ox8,
ReceiveOK=OxlO, OnLine=0x20 }
static void Main() {
Direction d = Direction.West;
Console.WriteLine("{0:G}", d);
Console.WriteLine("{0:F}", d); 1