Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает об использовании композитного форматирования для отображения дат.
Заметка: Это четвертая статья в серии постов о методах и операторах форматирования в Windows PowerShell.
- Основы форматирования в PowerShell рассказывает о вариантах применения статического метода Format класса String и оператора Windows PowerShell –f с использованием возможностей композитного форматирования.
- Отображение строк с использованием композитного форматирования рассматривает применение определителей формата для задания различных вариантов отображения строк.
- Отображение чисел с использованием композитного форматирования рассказывает об использовании определителей числовых форматов.
Знакомимся со определителями стандартных форматов даты и времени
Что мне нравится в использовании определителей стандартных форматов даты и времени, так это то, что мне не нужно беспокоиться о том, как будет работать мой скрипт на компьютере с другими языковыми параметрами. По умолчанию, определитель формата даты и времени использует региональные настройки того компьютера, на котором он запущен. Благодаря этому, дата и время всегда отображаются правильно, вне зависимости от того, на каком компьютере запущен скрипт.
Заметка: Более подробную информацию о определителях формата даты и времени вы можете найти в статье Standard Date and Time Format Strings на сайте MSDN.
Используем командлет Get-Date с параметром –Format
Самый простой способ воспользоваться определителями формата даты и времени – это указать их в качестве значения параметра –Format командлета Get-Date. Например, если я хочу получить дату в коротком формате, навроде 3/11/2013 (месяц/день/год – формат, использующийся в Соединенных Штатах), я использую определитель короткого формата даты – “d”.
PS C:\> Get-Date -Format d
3/11/2013
Заметка: Определители формата всегда чувствительны к регистру. Например, существуют такие определители, как “M” и “m”. В нашем случае, “d” – определитель короткого формата даты, а “D” – определитель длинного формата даты. Этот подход, когда строчная буква соответствует короткому формату, а заглавная – длинному, используется довольно часто. Например, “t” – это определитель короткого формата времени, а “T” – определитель длинного формата времени.
На рисунке представлено использование командлета Get-Date с различными определителями формата.
Форматирование строк
Стоит помнить о том, что когда вы указываете определитель формата в командлете Get-Date, объект System.DateTime конвертируется в строку. После этого вы уже не сможете производить с ним какие-либо операции, присущие объектам DateTime. Естественно, это не значит, что я не смогу передать это значение в файл Excel или базу данных SQL, но это будет уже не объект DateTime.
Кроме указания определителей формата в командлете Get-Date, я также могу воспользоваться композитным форматированием.
Пример 1. Используем метод Format класса String
В этом примере я воспользуюсь статическим методом Format класса .NET Framework System.String. В качестве аргументов я укажу индекс первого объекта – 0, который будет замещен результатом выполнения командлета Get-Date, а также определитель формата – “R”, соответствующий формату RFC1123.
PS C:\> [String]::Format(«{0:R}»,(get-date))
Mon, 11 Mar 2013 14:37:03 GMT
Пример 2. Используем оператор форматирования PowerShell
Для представления даты и времени в различных форматах я могу также воспользоваться оператором форматирования Windows PowerShell –f. Слева от него я задам элемент форматирования с требуемым определителем формата, справа я укажу командлет Get-Date. В представленной команде дата и время выводятся в универсальном формате.
PS C:\> «{0:U}» -f (Get-Date)
Monday, March 11, 2013 6:38:10 PM
Пример 3. Отображаем дату в соответствии с определенными региональными настройками
Кроме отображения даты в соответствии с региональными параметрами вашего компьютера, вы можете задать нужные региональные настройки вручную. Для этого нам нужно воспользоваться командлетом New-Object, чтобы создать экземпляр класса .NET Framework Globalization.CultureInfo. В качестве параметра мне нужно будет указать код в формате “язык-регион” (culture). Список кодов для разных стран и языков можно найти в статье National Language Support (NLS) API Reference.
Таким образом, все что мне нужно сделать — это создать экземпляр класса CultureInfo, указав нужные язык и регион, и указать формат отображения даты и времени. В этом примере я получаю текущие дату и время и сохраняю их в переменной $date. Далее я создаю экземпляр объекта CultureInfo и указываю в нем код “de-DE” (Немецкий — Германия). Затем я использую метод WriteLine для отображения даты в виде строки. В качестве параметров метода ToString я указываю определитель длинного формата даты – “D” и региональные настройки, ранее сохраненные в переменной $ci.
PS C:\> $date = get-date
PS C:\> $ci = New-Object globalization.cultureinfo(«de-DE»)
PS C:\> [console]::writeline($date.ToString(«D»,$ci))
Montag, 11. März 2013
Если я воспользуюсь командлетом Get-Culture, чтобы получить мои текущие региональные настройки, то будет выведена следующее.
PS C:\> Get-Culture
LCID Name DisplayName
—- —- ————
1033 en-US English (United States)
Заметка: Более подробное рассмотрение использования региональных настроек для вывода даты вы можете найти в посте Hey, Scripting Guy! Blog – Use Culture Information in PowerShell to Format Dates.
Автор:
Ed Wilson, Microsoft Scripting Guy
Оригинал:
Страницы в социальных сетях:
Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell