Начиная с версии 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);
}
}
Выполнение этой программы приводит к следующему результату, который и в этом случае зависит от конкретных настроек языковых и региональных параметров локализации базового программного обеспечения, а также от загрузки системы задачами и ее быстродействия.