Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает об использовании определителей настраиваемого формата объекта TimeSpan в Windows PowerShell.
Заметка: Это завершающая статья в серии постов о методах и операторах форматирования в Windows PowerShell.
- Основы форматирования в PowerShell рассказывает о вариантах применения статического метода Format класса String и оператора Windows PowerShell –f с использованием возможностей композитного форматирования.
- Отображение строк с использованием композитного форматирования рассматривает применение определителей формата для задания различных вариантов отображения строк.
- Отображение чисел с использованием композитного форматирования рассказывает об использовании определителей числовых форматов.
- Отображение дат с использованием композитного форматирования рассматривает варианты форматирования объектов даты и времени.
- Отображение объектов TimeSpan с использованием композитного форматирования рассказывает об использовании определителей стандартных форматов объекта TimeSpan.
В этой статье я решил попробовать поработать с определителями настраиваемого формата объекта TimeSpan, чтобы иметь возможность представить значение временного промежутка в таком виде, какой мне нужен.
Заметка: Более подробную информацию об определителях настраиваемого формата объекта TimeSpan вы можете найти в статье Custom TimeSpan Format Strings на сайте MSDN. Функциональность композитного форматирования более полно рассмотрена в статье Composite Formatting.
Определители настраиваемого формата объекта TimeSpan
На сайте MSDN представлена большая таблица, перечисляющая определители настраиваемого формата TimeSpan. Я же чаще всего использую четыре из них.
Определитель формата | Описание |
“dd” | Число дней в интервале времени. Если требуется, отображает 0 в первой позиции, например – 05. |
“hh” | Число часов в интервале времени (не включая число часов в полных днях). Таким образом, интервал времени в 25 часов будет представлен как 01. Для отображения дней используйте “dd”. |
“mm” | Число минут в интервале времени (не включая число минут в полных днях). Таким образом, интервал времени в 65 минут будет представлен как 05. Для отображения часов используйте “hh”. |
“ss” | Число секунд в интервале времени (не включая число секунд в полных минутах). Таким образом, интервал времени в 65 секунд будет представлен как 05. Для отображения минут используйте “mm”. |
Если я укажу определитель формата в виде одной буквы, например “d”, я получу количество дней, не содержащее 0 в первой позиции. Мне кажется, это имеет смысл, и поэтому мне не требуется заучивать еще 4 определителя – я просто знаю, что они есть. В следующем скрипте используется определитель настраиваемого формата для отображения только количества дней между двумя датами. Преимущество такого подхода в том, что я могу создать строку, которая будет выглядеть именно так, как мне нужно.
PS C:\> $ts = [datetime]»3/14/13″ -[datetime]»3/12/13″
PS C:\> «The lapsed time is: {0:dd} days» -f $ts
The lapsed time is: 02 days
Использование объекта TimeSpan
При использовании такого подхода, мы можем отображать только те части объекта TimeSpan, которые нам нужны. Это гораздо проще, чем использовать подвыражения для того чтобы, получить значения определенных свойств объекта. Если я знаю, как использовать нужные мне определители формата в элементе форматирования, я могу выбрать только ту информацию, которая мне нужна. Это позволяет мне более гибко работать с интервалами времени, нежели при использовании стандартных форматов, рассматривавшихся в предыдущей статье — Отображение объектов TimeSpan с использованием композитного форматирования.
PS C:\> «The lapsed time is: {0:dd} days and {0:hh} hours» -f $ts
The lapsed time is: 02 days and 00 hours
Я могу еще немного изменить команду и вывести дни, часы, секунды и даже миллисекунды. (Хотя в подобной ситуации я, наверное воспользуюсь определителем стандартного длинного формата “G”). В следующей команде я получаю количество дней, часов и минут из объекта TimeSpan.
PS C:\> «The lapsed time is: {0:dd} days and {0:hh} hours and {0:mm} minutes» -f $ts
The lapsed time is: 02 days and 00 hours and 00 minutes
Предыдущие команды и их вывод представлены на рисунке.
Автор:
Ed Wilson, Microsoft Scripting Guy
Оригинал:
Страницы в социальных сетях:
Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell