Отображение объектов TimeSpan с использованием композитного форматирования – Hey, Scripting Guy! Blog

Резюме: Используем Windows PowerShell и возможности композитного форматирования для работы с объектами TimeSpan.

Объект TimeSpan представляет из себя промежуток времени между некоторыми двумя моментами. Например, если мы попробуем выяснить величину временного промежутка между 14 марта 2013 года и 12 марта 2013 года, результатом станет объект типа TimeSpan.

PS C:\> [datetime]»3/14/13″ -[datetime]»3/12/13″

Days : 2

Hours : 0

Minutes : 0

Seconds : 0

Milliseconds : 0

Ticks : 1728000000000

TotalDays : 2

TotalHours : 48

TotalMinutes : 2880

TotalSeconds : 172800

TotalMilliseconds : 172800000

Заметка: Это пятая статья в серии постов о методах и операторах форматирования в Windows PowerShell.

Отображение объекта TimeSpan по умолчанию

По умолчанию Windows PowerShell отображает все свойства объекта TimeSpan. Как вы можете видеть в предыдущем примере – вывод получается достаточно сумбурный. Но это не проблема, если я работаю интерактивно и моя цель – всего лишь узнать величину промежутка времени между двумя моментами во времени.

Передав объект командлету Get-Member мы получим список его свойств.

[datetime]»3/14/13″ -[datetime]»3/12/13″ | Get-Member -MemberType *property

Команда и ее вывод представлены на рисунке.

01

Таким образом, если мне нужно узнать количество часов между значениями двух объектов DateTime, мне придется сначала получить имя нужного свойства (воспользовавшись командлетом Get-Member, либо просто запустив команду и изучив ее вывод). Pатем я смогу получить значение свойства, поместив команду в скобки и указав его имя.

PS C:\> ([datetime]»3/14/13″ -[datetime]»3/12/13″).totalhours

48

Обычно я использую этот подход, когда мне нужно получить значение определенного свойства объекта TimeSpan. Однако есть более удобный способ представить объект в том виде, который мне нужен.

Используем определители стандартных форматов объектов TimeSpan

Самый простой способ использовать определители форматов TimeSpan – это композитное форматирование. Для объектов TimeSpan существует три стандартных формата. Они представлены в таблице.

Format Specifier Name
  “c”   Constant format (not culture sensitive.[-]d.hh:mm:ss.[fffffff]
  “g”   General short format (culture sensitive)[-]d.hh:mm:ss.[fffffff]
  “G”   General long format (culture sensitive)[-]d.:hh:mm:ss.fffffff

Заметка: Подробную документацию по определителям стандартных форматов объектов TimeSpan вы можете найти в статье Standard TimeSpan Format Strings на сайте MSDN.

Пример использования этих форматов приведен на рисунке.

02

Заметка: Более полную информацию о композитном форматировании вы можете найти в статье Composite Formatting на сайте MSDN.

Пример 1. Используем статический метод WriteLine

Для того, чтобы задать формат вывода объекта TimeSpan при помощи статического метода WriteLine класса .NET Framework System.Console, мне нужно указать строку, которую я хочу вывести и элемент форматирования, содержащий определитель формата “c”. “c” – это определитель формата, не зависящего от региональных настроек компьютера. То есть, при его использовании, вывод объекта TimeSpan всегда будет одним и тем же. В качестве второго параметра метода WriteLine я укажу объект TimeSpan. Код и его вывод приведен ниже.

PS C:\> $ts = [datetime]»3/14/13″ -[datetime]»3/12/13″

PS C:\> [console]::WriteLine(«The lapsed time is: {0:c}», $ts)

The lapsed time is: 2.00:00:00

Пример 2. Используем оператор форматирования Windows PowerShell

Для того, чтобы воспользоваться определителем формата объекта TimeSpan с оператором форматирования Windows PowerShell, с левой стороны от оператора задайте строку и добавьте элемент форматирования, содержащий требуемый определитель формата. Справа от него укажите нужный объект TimeSpan.

PS C:\> $ts = [datetime]»3/14/13″ -[datetime]»3/12/13″

PS C:\> «The lapsed time is: {0:g}» -f $ts

The lapsed time is: 2:0:00:00

Пример 3. Выводим объект TimeSpan с отображением миллисекунд

Одно из полезный свойств определителей формата “c” и “g”, это то, что они отображают те части объекта, которые существуют. Таким образом, если объект TimeSpan не содержит дней, при выводе часть, определяющая дни, будет отсутствовать. Если в объекте определены миллисекунды, они будут выведены.

В приведенном ниже скрипте я сохраняю текущее значение даты и времени в переменной. Далее я ожидаю некоторое время и сохраняю еще один объект DateTime во второй переменной. Затем я создаю объект TimeSpan, представляющий из себя разницу между двумя объектами DateTime. После этого я использую оператор форматирования Windows PowerShell для отображения объекта TimeSpan в коротком формате, в соответствии с текущими региональными настройками компьютера. Поскольку обе переменные относятся к одному и тому же дню, часть объекта TimeSpan определяющая дни не отображается.

PS C:\> $now = get-date

PS C:\> $later = get-date

PS C:\> $nts = New-TimeSpan -Start $now -End $later

PS C:\> «The timespan is {0:g}» -f $nts

The time span is 0:09:03.1051821

Этот же самый подход приведен на рисунке ниже. На нем отображены результаты использования всех трех стандартных форматов объекта TimeSpan.

03

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2013/03/15/use-powershell-and-conditional-formatting-to-format-time-spans.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s