Powershell перечисляет даты между диапазоном дат. Текущая дата powershell


Форматы времени и даты в PowerShell — Заметки о Windows

Для получения даты и времени в PowerShell существует командлет Get-Date. Выполнив команду Get-Date, мы получим текущее время и дату в полном формате. Вот так выглядит стандартный вывод даты в английском (US) стандарте:

 

В принципе вывод достаточно информативен, но иногда может понадобиться получить дату в формате, отличном от дефолтного. Нет проблем, при необходимости формат вывода можно легко изменить множеством различных способов. Наиболее простой — это использовать стандартные форматы даты и времени, приведенные в таблице.

Параметр Формат времени\даты Пример вывода
d Короткий формат даты (ShortDatePattern) 7/2/2014
D Длинный формат даты (LongDatePattern) Wednesday, July 2, 2014
f Полная дата и время (long date and short time) Wednesday, July 2, 2014 12:50 AM
F Полная дата и время (long date and long time) Wednesday, July 2, 2014 12:50:49 AM
g General (short date and short time) 7/2/2014 12:50 AM
G General (short date and long time) 7/2/2014 12:50:49 AM
m, M День и месяц (MonthDayPattern) July 2
o Round-trip date/time pattern 2014-07-02T12:50:49.3494995+04:00
r, R RFC1123Pattern Wed, 02 Jul 2014 12:50:49 GMT
s SortableDateTimePattern (based on ISO 8601) 2014-07-02T12:50:49
t Короткий формат времени (ShortTimePattern) 12:50 AM
T Длинный формат времени (LongTimePattern) 12:50:49 AM
u Универсальный формат (UniversalSortableDateTimePattern) 2014-07-02 11:21:50Z
U Полная дата и время (long date and long time) в UTC Wednesday, July 1, 2014 08:50:52 PM
y, Y Год и месяц (YearMonthPattern) July, 2014

 

Для использования формата надо указать нужное значение с помощью параметра Format. Например так мы получим дату в коротком варианте:

Get-Date -Format d

Так выведем только год и месяц:

Get-Date -Format y

Или только время:

Get-Date -Format T

А так посмотрим дату\время по UTC:

Get-Date -Format U

 

Если же стандартных форматов недостаточно, то вывод даты\времени можно кастомизировать с помощью пользовательских параметров. Их довольно много, вот наиболее употребимые.

Параметр Описание
d, %d День месяца в цифровом формате (1-31), без добавления лидирующего нуля.
dd День месяца в цифровом формате (01-31), с добавлением лидирующего нуля.
ddd Название дня недели, короткий вариант (напр. Sun).
dddd Название дня недели, полный вариант.
h, %h Часы в 12-часовом варианте (1-12) без добавления лидирующего нуля.
hh Часы в 12-часовом варианте (01-12) с добавлением лидирующего нуля.
H, %H Часы в 24-часовом варианте (0-23) без добавления лидирующего нуля.
HH Часы в 24-часовом варианте (00-23) с добавлением лидирующего нуля.
m, %m Минуты, без добавления лидирующего нуля.
mm Минуты, с добавлением лидирующего нуля.
M, %M Месяц в цифровом формате (1-12) без добавления лидирующего нуля.
MM Месяц в цифровом формате (01-12) с добавлением лидирующего нуля.
MMM Название месяца, сокращенный вариант (напр. Jul).
MMMM Название месяца, полный вариант.
s, %s Секунды, без добавления лидирующего нуля.
ss Секунды, с добавлением лидирующего нуля.
f,ff,fff,ffff Миллисекунды.
t, %t Переключатель AM/PM (первая буква).
tt Переключатель AM/PM.
y, %y Год без указания тысячелетия. Если год меньше 10, лидирующий ноль не добавляется (напр. 8).
yy Год без указания тысячелетия. Если год меньше 10, лидирующий ноль добавляется (напр. 08).
yyyy Год, полный формат.
z, %z Часовая зона, короткий формат (напр. +4).
zz Часовая зона, короткий формат (напр. +04).
zzzz Часовая зона, полный формат (напр. +04:00).
g Эра, до\после НЭ.

 

Знак процента (%) в указании параметра следует добавлять, если параметр используется сам по себе, а не в сочетании с другими параметрами.

Если необходимо добавить в вывод какую либо текстовую информацию, то можно использовать обратный слэш (\). Поставленный в начале он позволяет интерпретировать символы не как параметры, а как обычные буквы.  Если же вы хотите использовать слэш как разделитель, то его надо экранировать, используя двойной слэш (\\).

Пользовательские настройки позволяют получить дату\время в любом удобном виде, например так:

Get-Date -Format dd.MM.yyyy

Или так:

Get-Date -Format ″dd MMMM yyyy HH:mm:ss″

И даже так:

Get-Date -Format ″dd MMMM yyyy HH:mm:ss.ffff zzzz g″

 

Но и это не все. У командлета Get-Date есть еще один параметр UFormat, для вывода даты в Unix-формате.

Параметр Описание
с Дата и время, с сокращениями  (Wed Jul 2 12:50:49 2014)
D Короткий формат даты (7/2/2014)
С Век (21).
у, g Год в двузначном формате (14)
Y, G Год в четырехзначном формате (2014)
b, h Месяц, короткое название (Jul)
B Месяц, полное название (July)
m Номер месяца в двузначном формате (07)
U, W Номер недели в году (00-52)
V Номер недели в году (01-53)
a День недели, сокращенное название (Sun)
A День недели, полное название (Sundy)
u, w Номер дня недели, начиная с понедельника (1-7)
d День месяца в двузначном формате (07).
e День месяца в формате пробел+однозначное число ( 07).
j Номер дня в году (1-366).
p Переключатель AM\PM.
r Время в 12-часовом формате
R Время в 24-часовом формате, без секунд
T, X Время в 24-часовом формате, полный вариант
Z Смещение относительно UTC (+04).
H, k Час в 24-часовом формате (00-23)
I, l Час в 12-часовом формате (01-12)
 M  Минуты (01-60)
 S  Секунды (01-60)
 s  Число секунд, прошедших с 1 января 1970 года

 

При использовании UFormat перед каждым значением необходимо ставить знак %, например так:

Get-Date -UFormat ″%A %d %B %r″

UFormat интересен тем, что можем получить довольно нестандартные варианты, например номер дня:

Get-Date -UFormat %j

Или недели в году:

Get-Date -UFormat %j

И даже количество времени в секундах, прошедшее с 00 часов 00 минут 00 секунд 1 января 1970 года (начало отсчета времени для UNIX-систем):

Get-Date -UFormat %s

 

Как видите, вариантов вывода море, есть из чего выбрать. И в завершение напомню, что формат вывода времени\даты зависит от региональных настроек, изменить которые можно из панели управления.

 

На этом все, а в следующий раз рассмотрим варианты преобразования текстовых строк в формат даты\время.

windowsnotes.ru

date - Powershell перечисляет даты между диапазоном дат.

Я пишу скрипт в PowerShell и мне нужно знать даты между диапазоном дат.

Сценарий предназначен для автоматизации отчетов. Скажем, есть куча зарегистрированных данных, но данные собираются только по будням, без выходных и без выходных. Я FTP и собираю последние 15 поколений.

С помощью сценария я открываю последний экземпляр отчета в Excel. Как только рабочая книга открылась, я прочитал ячейку, которая содержит дату, и эта дата будет определять, когда последний раз отчет был запущен. (Сегодня данные, однако, не будут доступны до завтра, так что это всегда на 1 день позади.)

Когда я получаю эту дату, я использую Get-Date для получения текущей даты. Мне нужно знать даты между текущей датой и датой, которую я читаю в Excel. Впоследствии мне нужно будет посмотреть, упали ли какие-либо даты на праздник или если они упали в выходные дни.

$excelDate = $excel.Cells.Item(1489, 1).Value() $currentDate = Get-Date

Скажем, $excelDate = "03/07/2014"

и $currentDate = "03/14/2014"

То, что я хотел бы получить, - 03/08/2014, 03/09/2014, 03/10/2014, 03/11/2014, 03/12/2014, 03/13/2014.

Как только у меня появятся эти даты, я могу проверить, был ли какой-нибудь из них праздником, и если они упали на выходные.

Если они упадут на праздник, я могу вычесть 1 день (или 2 дня, если последний день в отчете упал в пятницу... Я все еще пытаюсь понять, как я это сделаю.) И используйте switch чтобы get-content соответствующих данных, прежде чем я начну разбирать и помещать их в Excel.

Так что-то вроде этого:

switch($daysMissed) { 1 {Write-Host "The Report is currently up to date!!" } 2 {$data = get-content C:\Users\$userName\Desktop\Report\data\data.txt } 3 {$data = get-content C:\Users\$userName\Desktop\Report\data\data2.txt } 4 {$data = get-content C:\Users\$userName\Desktop\Report\data\data3.txt } 5 {$data = get-content C:\Users\$userName\Desktop\Report\data\data4.txt } 6 {$data = get-content C:\Users\$userName\Desktop\Report\data\data5.txt } 7 {$data = get-content C:\Users\$userName\Desktop\Report\data\data6.txt } 8 {$data = get-content C:\Users\$userName\Desktop\Report\data\data7.txt } 9 {$data = get-content C:\Users\$userName\Desktop\Report\data\data8.txt } 10 {$data = get-content C:\Users\$userName\Desktop\Report\data\data9.txt } 11 {$data = get-content C:\Users\$userName\Desktop\Report\data\data10.txt } }

Как только у меня есть правильные данные, я делаю кучу вещей в Excel и заканчиваю отчет о днях, тогда я бы пошел $daysMissed = $daysMissed - 1.

Итак, мой вопрос в том, как именно я перечислю даты, между диапазоном дат?

или, есть ли более простой способ делать то, что я делаю?

Спасибо за помощь!

qaru.site

Использование объектных методов PowerShell | Windows IT Pro/RE

У большинства пользователей, создающих даже самые простые сценарии PowerShell, рано или поздно возникает необходимость узнать те или иные время и дату. Для примера вспомним статью «Search-ADAccount и пропавшие 15 дней» (опубликована в Windows IT Pro/RE № 4 за 2012 год), посвященную поиску ответа на вопрос, с какими учетными записями не совершалась регистрация в течение последних 90 дней. Тогда задача была решена с помощью команды Search-ADAccount, но можно было составить «двустрочник» с помощью Where-Object, например так:

$LatestDay = [дата 90 дней назад] get-aduser -filter * -properties * | where {$_.lastlogondate -le $LatestDay}

А как вывести дату, которая приходится на 90 дней назад? После недолгого расследования выясняется, что это можно сделать с помощью такой команды:

$LatestDay= ((get-date).AddDays (-90))

Даже не имея дела с Active Directory (AD), вы можете увидеть, как работает Get-Date, введя в окне командной строки PowerShell команду:

(get-date).AddDays (-90)

Сказать по правде, я знал об этом лишь потому, что немного знаком с. NET-программированием. Но и мне кажется странным, что приходится ставить столько скобок, чтобы заставить Get-Date вычислить дату, наступившую на 90 дней раньше текущего момента. Казалось бы, логичнее было бы использовать синтаксис, как в приведенном ниже примере (в таком виде команда не работает, не стоит и пытаться).

get-date -AddDays -90

Практически у всех, кого я обучал работе с PowerShell, возникала одна и та же реакция: «Зачем скобки?» Дело в том, что Get-Date — старая команда еще из арсенала PowerShell 1.0. В то время с PowerShell имели дело по большей части разработчики, привыкшие мыслить категориями объектно-ориентированного программирования, в частности объектно-ориентированного. NET-программирования.

Для тех, кто никогда не занимался объектно-ориентированным программированием, это звучит пугающе, однако все не так страшно. Общая идея объектного подхода состоит в стремлении облегчить программистам жизнь. Для примера (да простят меня программисты за чрезмерное упрощение) предположим, что вам надо написать код. NET для управления данными о заработной плате сотрудников компании. В таком сценарии «объектами» являются сотрудники, и у них много свойств. Как мы помним, вывести свойства можно с помощью Get-Member:

get-aduser -filter * | get-member

Результатом этой команды будет список элементов, таких как GivenName или Surname, типом которых (MemberType) является Property («Свойство»). Взглянув более широко, можно обнаружить элементы, типом которых является не Property, а Method («Метод»).

Так или иначе, даже в простой системе у каждого сотрудника есть имя, электронный адрес, номер телефона, дата приема на работу и размер почасовой ставки заработной платы. Это уже пять свойств, из которых первые три — текстовые строки, подчиняющиеся определенным правилам. Например, номер телефона может включать только цифры, тире и скобки. Как выглядит электронный адрес, знает каждый. Дата приема на работу — это переменная типа дата/время. Как обсуждалось ранее, значения этой переменной не могут быть случайными. Датой приема на работу не может быть, скажем, 76 марта 2417 г. Наконец, почасовая ставка заработной платы — это число с плавающей запятой, которое тоже имеет свои ограничения. В частности, у большинства из нас почасовой заработок не выражается отрицательным числом, даже если иногда он может таковым казаться!

Каждый, кто будет это программировать в моей сверхпростой инфраструктуре. NET, захочет включить код, который позволит время от времени менять отдельные свойства сотрудников, не затрудняя себя необходимостью вводить все данные каждый раз заново. Такой код, называемый «методом», будет прикреплен к объекту сотрудника. Прикрепленный к объекту сотрудника метод modify («изменить»), вероятно, потребует ввода двух параметров: свойства, которое нужно изменить, и нового значения. Гибридная запись, представляющая собой смесь упрощенного языка. NET и PowerShell, может выглядеть так:

(get-employee Jack).modify (HourlyRate,36.10)

Этот запрос предусматривает изменение почасовой ставки заработной платы сотрудника по имени Jack с указанием нового значения 36,10 долл. Такой синтаксис имел смысл для первых разработчиков PowerShell, которые мыслили категориями. NET, в результате чего Get-Date и стал таким, какой он есть.

Вывести методы Get-Date можно с помощью такой команды:

get-date | get-member

Результатом ее выполнения будет список элементов типа Method, включая AddDays, AddHours и AddYears. Можно, например, выяснить дату и время на момент, который наступит через 134 часа после текущего момента, с помощью такой команды:

(get-date).AddHours (134)

Таким образом, общая форма применения методов может быть записана следующим образом:

(команда, получающая исходный объект).имя метода (параметры метода)

Get-Date получает текущую дату. Имя метода — AddHours. Требуется узнать дату и время на момент, который наступит через 134 часа, поэтому аргументом (числом, передаваемым методу) является 134. Запрос можно сделать более удобным для восприятия, если записать его в виде двух строк:

$Now = get-date $Now.AddHours (134)

Остается объяснить, как я об этом узнал. Краткий ответ: почитал документацию по технологии. NET, частично лежащей в основе Get-Date. Эту тему мы продолжим в следующий раз.

www.osp.ru

Выясняем дату установки системы с помощью PowerShell — Заметки о Windows

Выясняем дату установки системы с помощью PowerShell

Помните ли вы, когда была установлена ваша операционная система и сколько времени прошло с того момента? Если нет, то это легко можно выяснить с помощью PowerShell…

Извлечь дату установки из операционной системы можно с помощью WMI:

$system = Get-WmiObject -Class Win32_OperatingSystem $system.Installdate

 

Полученная таким способом дата включает в себя время с точностью до секунды, а также географическую зону (240). Выглядит не очень понятно, поэтому преобразуем дату в удобочитаемый формат:

$InstallDate = [Management.ManagementDateTimeconverter]::ToDateTime($system.installdate)

 

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

$AfterInstallDays = ((Get-Date) — $Installdate).Days

Объединим все в одном скрипте:

$system = Get-WmiObject -Class Win32_OperatingSystem# Получаем дату установки ОС$InstallDate = [Management.ManagementDateTimeconverter]::ToDateTime($system.installdate)# Вычисляем время, прошедшее с момента установки$AfterInstallDays = ((Get-Date) — $Installdate).Days$AfterInstallHours = ((Get-Date) — $Installdate).Hours$AfterInstallMinutes = ((Get-Date) — $Installdate).Minutes# Переводим дату установки в короткий формат$ShortInstallDate = ″{0:yyyy-MM-dd HH:MM}″ -f ($InstallDate)# Выводим результаты$InstallDateString = ″Система установлена: $ShortInstallDate (Прошло дней:$AfterInstalldays часов:$AfterInstallHours минут:$AfterInstallMinutes)″ $InstallDateString

Запустив скрипт, мы узнаем когда была установлена система и сколько времени прошло с этого момента.

 

Вот такая получилась напоминалка. Теперь можно не бояться надвигающегося склероза, дату установки системы мы узнаем всегда 🙂

windowsnotes.ru

Конвертируем текст в дату с помощью PowerShell — Заметки о Windows

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

В этом случае придется предварительно сконвертировать строку текста в тип DateTime. А поскольку разные приложения пишут дату в логах в совершенно разных, порой нестандартных форматах, то при их обработке может возникнуть проблема.

Проще всего взять исходную строку и явно указать для нее тип данных, например так:

[datetime] ″07-13-2014 18:30:23″

Но тут есть одна тонкость — дата должна быть строго в определенном формате. Если точнее, то в американском (US), т.е. вида  MM/dd/yyyy HH:mm:ss.ffff (месяц/число/год часы:минуты:секунды.миллисекунды). Это не зависит от текущих региональных настроек системы, по умолчанию формат DateTime всегда американский.

Возможно это было сделано для того, чтобы скрипты не зависели от региональных настроек и одинаково выполнялись на различных системах. Поэтому, если исходная строка не подходит под нужный формат, то мы получим либо неправильный результат, либо ошибку.

 

Для разбора времени\даты в соответствии с региональными настройками можно воспользоваться статическими методами .Net класса DateTime. Выведем список статических свойств и методов командой:

[DateTime] | Get-Member -Static

Здесь нас интересуют методы Parse и ParseExact, предназначенные для парсинга даты, а также TryParse и TryParseExact — для проверки валидности входных данных.

 

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

Для разбора даты в соответствии с текущими региональными настройками воспользуемся методом parse:

[datetime]::parse(″13-07-2014 18:30:23″)

 

Если же данные представлены в формате, отличном от текущего, то можно воспользоваться методом parseexact. Для стандартных форматов даты\времени можно указать один из предопределенных типов, например:

[datetime]::parseexact(‘2014-07-13T18:30:23.3494995+04:00’, ′o′, $null)

Если же ни один из стандартных форматов не подходит, то можно указать маску, по которой будет производиться разбор даты, к примеру так:

[datetime]::parseexact(‘13072014-18~30~23’, ‘ddMMyyyy-HH~mm~ss’, $null)

 

Ну и если надо предварительно выяснить, содержит ли строка данные типа DateTime, то можно воспользоваться методами TryParse и TryParseExact. Для стандартных форматов подойдет TryParse:

$d = New-Object DateTime[datetime]::tryparse(‘13.07.2014 18:30:23’, [ref]$d)

А для нестандартных — TryParseExact:

$d = New-Object DateTime[datetime]::tryparseexact(‘130720014-18~30~23’, ‘ddMMyyyy-HH~mm~ss’, [System.Globalization.CultureInfo]::InvariantCulture, [System.Globalization.DateTimestyles]::None, [ref]$d)

 

Вот как то так 🙂

windowsnotes.ru

Get-Date

Получает текущие значение даты и времени.

Get-Date [-Format <string>] [[-Date] <DateTime>] [-Day <int>] [-DisplayHint {<Date> | <Time> | <DateTime>}] [-Hour <int>] [-Minute <int>] [-Month <int>] [-Second <int>] [-Year <int>] [<CommonParameters>] Get-Date [-UFormat <string>] [[-Date] <DateTime>] [-Day <int>] [-DisplayHint {<Date> | <Time> | <DateTime>}] [-Hour <int>] [-Minute <int>] [-Month <int>] [-Second <int>] [-Year <int>] [<CommonParameters>]

Командлет Get-Date получает объект DateTime, содержащий текущую или заданную дату. Он позволяет выводить дату и время в различных форматах Windows и UNIX. С помощью командлета Get-Date можно создать текстовую строку с датой или временем, а затем передать ее другим командлетам или программам.

-Date <DateTime>

Задает дату и время. По умолчанию команда Get-Date возвращает текущие значения системной даты и времени.

Введите дату в формате, определенном локалью системы, например dd-MM-yyyy (Немецкий [Германия]) или MM/dd/yyyy (Английский [США]).

Обязательно?

false

Позиция?

1

Значение по умолчанию

Принимать входные данные из конвейера?

true (ByValue, ByPropertyName)

Принимать подстановочные знаки?

false

-Day <int>

Задает отображаемое значение числа месяца. Введите значение от 1 до 31. Это значение будет отображаться вместо текущего числа.

Если указать значение, превышающее число дней в месяце, оболочка Windows PowerShell прибавит соответствующее значение к количеству дней в месяце и выведет полученный результат. Например, результатом выполнения команды "get-date -month 2 -day 31" будет "3 марта", а не "31 февраля".

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-DisplayHint <DisplayHintType>

Определяет, какие элементы даты и времени будут отображаться.

Допустимые значения:

-- Date: отображается только дата;

-- Time: отображается только время;

-- DateTime: отображаются дата и время.

По умолчанию используется значение DateTime.

Этот параметр не влияет на объект DateTime, возвращаемый командой Get-Date.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Format <string>

Отображает дату и время в формате Microsoft .NET Framework, указанном описателем формата. Введите описатель формата. Список доступных описателей формата см. в разделе "DateTimeFormatInfo Class" библиотеки MSDN (Microsoft Developer Network) по адресу http://go.microsoft.com/fwlink/?LinkId=143638.

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

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Hour <int>

Задает отображаемое значение часа. Введите значение от 1 до 23. Это значение будет отображаться вместо текущего часа.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Minute <int>

Задает отображаемое значение минуты. Введите значение от 1 до 59. Это значение будет отображаться вместо текущей минуты.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Month <int>

Задает отображаемое значение месяца. Введите значение от 1 до 12. Это значение будет отображаться вместо текущего месяца.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Second <int>

Задает отображаемое значение секунды. Введите значение от 1 до 59. Это значение будет отображаться вместо текущей секунды.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-UFormat <string>

Отображает дату и время в формате UNIX. Список описателей формата см. в разделе "Примечания".

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

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Year <int>

Задает отображаемое значение года. Введите значение от 1 до 9999. Это значение будет отображаться вместо текущего года.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

<CommonParameters>

Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.

Входным типом является тип объектов, которые можно передавать командлету по конвейеру. Возвращаемым типом является тип объектов, возвращаемых командлетом.

Входные данные

None

Передать входные данные этому командлету по конвейеру невозможно.

Выходные данные

System.DateTime или System.String

При использовании параметров Format и UFormat выходной объект — System.String.

По умолчанию дата и время отображаются в определенном локалью системы полном формате даты и полном формате времени.

При передаче даты по конвейеру командлету, принимающий строковые значения, например командлету Add-Content, оболочка Windows PowerShell преобразует объект DateTime в строку, прежде чем добавить его в файл. По умолчанию метод ToString() использует короткий формат даты и полный формат времени. Чтобы указать другой формат, воспользуйтесь параметрами Format или UFormat командлета Get-Date.

Значения Uformat:

Параметр UFormat может иметь следующие значения. Формат команды таков:

get-date -uformat %<значение>

Например:

get-date -uformat %d

Дата и время:

Дата и время — полный формат

(по умолчанию) (Пятница, 16 июня 2006 г. 10:31:27)

c Дата и время — сокращенный формат (Пт 16 июн 2006 10:31:27)

Дата:

D Дата в формате мм/дд/гг (06/14/06)

x Дата в стандартном формате локали (09/12/07 в случае американского варианта английского стандарта)

Год:

C Век (в случае 2006 года — 20)

Y Год в четырехзначном формате (2006)

y Год в двузначном формате (06)

G То же, что и "Y"

g То же, что и "y"

Месяц:

b Сокращенное название месяца (Янв)

B Полное название месяца (Январь)

h То же, что и "b"

m Номер месяца (06)

Неделя:

W Неделя года (00–52)

V Неделя года (01–53)

U То же, что и "W"

День:

a Сокращенное название дня недели (Пн)

A Полное название дня недели (Понедельник)

u Номер дня недели (понедельник = 1)

d День месяца — двузначный формат (05)

e День месяца — однозначное число, которому предшествует пробел ( 5)

j День года (1–366)

w То же, что и "u"

Время:

p AM или PM (до полудня или после полудня)

r Время в 12-часовом формате (09:15:36 AM)

R Время в 24-часовом формате без секунд (17:45)

T Время в 24-часовом формате (17:45:52)

X То же, что и "T"

Z Сдвиг часового пояса от всеобщего скоординированного времени (UTC) (-07)

Час:

H Час в 24-часовом формате (17)

I Час в 12-часовом формате (05)

k То же, что и "H"

l То же, что и "I" ("L" в нижнем регистре)

Минуты и секунды:

M Минуты (35)

S Секунды (05)

s Число секунд, прошедших с 00 часов 00 минут 00 секунд 1 января 1970 года (1150451174.95705)

Специальные знаки:

n Знак новой строки (\n)

t Знак табуляции (\t)

winintro.ru

Formatting Date Strings with PowerShell – Hey, Scripting Guy! Blog

Summary: Microsoft Scripting Guy, Ed Wilson, talks about formatting date strings with Windows PowerShell.

Microsoft Scripting Guy, Ed Wilson, is here. It seems that different ways to display dates and times are in great supply. In fact, there are dozens of ways to do this. If I decide that I do not like the way a date or time displays, I can change it. In addition, the way a particular date style displays in one country is different than the way it displays in another country.

These differences are part of the culture settings. For example, the output from the Get-Date cmdlet appears differently depending on the UI culture settings. Here is an example:

PS C:> Use-Culture de-de {get-date}

Mittwoch, 21. Januar 2015 12:23:40

PS C:> Get-Date

Wednesday, January 21, 2015 12:23:45 PM

   Note  The Use-Culture function is not standard in Windows PowerShell or Windows. It comes from Lee Holmes’     PowerShell Cookbook module. I installed it from the PowerShell Gallery, but it is also available on PoshCode.

In general, I want the date to automatically change the way it displays based on culture settings because it helps avoid confusion. There may be times when I want to override this behavior. I can do this by directly formatting the date. I can use the ToString method and specify the display pattern. The pattern MM – dd –yyyy specifies that I want the month, day, and year to appear in that order. The MM is case sensitive. Here is an example:

PS C:> (Get-Date -Month 2 -Day 12 -Year 2015).tostring("MM-dd-yyyy")

02-12-2015

There can be a very real problem with this technique. In many regions, the day value comes first. So is the month February or is it December? Here is how the date displays when I use German UI culture settings:

PS C:> Use-Culture de-DE {(Get-Date -Month 2 -Day 12 -Year 2015).tostring("MM-dd-yyyy")}

02-12-2015

According to their pattern, this is December 2, 2015. Here is the short date pattern:

PS C:> [System.Globalization.CultureInfo]::GetCultureInfo(1031).DateTimeFormat.ShortDatePattern

dd.MM.yyyy

Now the culture settings use a hexadecimal value from the National Language Support API. Germany uses a hex value of 0x0407. If I convert it to a decimal format, it becomes 1031. This is shown here:

PS C:> 0x0407

1031

I double check that I have the correct language settings by using the GetCulturalInfo static method:

PS C:> [System.Globalization.CultureInfo]::GetCultureInfo(1031)

LCID             Name             DisplayName                                                    

----                 ----                  -----------                                                     

1031             de-DE            German (Germany)      

So if I really want to display a short date, I need to use a format specifier to tell Windows PowerShell to display a short date. In this way, it will be culture specific. On the MSDN page, Standard Date and Time Format Strings, I learn that the .NET short date specifier is “d”. So, I use the –format parameter of Get-Date, and the following appears:

PS C:> get-date -Format d

1/21/2015

But what about using a different culture? Well, this is how it displays in culture de-DE:

PS C:> Use-Culture de-DE {get-date -Format d}

21.01.2015

As a best practice, I should avoid creating my own date format strings if at all possible. If I use the built-in .NET date format specifiers, Windows PowerShell automatic displays it in the correct format. Here is a table of the .NET date format specifiers.

Format Specifier

Description

Examples

d

Short date pattern

2009-06-15T13:45:30 -> 6/15/2009 en-US

2009-06-15T13:45:30 -> 15/06/2009 fr-FR

2009-06-15T13:45:30 -> 2009/06/15 ja-JP

D

Long date pattern

2009-06-15T13:45:30 -> Monday, June 15, 2009 en-US

2009-06-15T13:45:30 -> 15 июня 2009 г. ru-RU

2009-06-15T13:45:30 -> Montag, 15. Juni 2009 de-DE

f

Full date pattern with short time pattern

2009-06-15T13:45:30 -> Monday, June 15, 2009 1:45 PM en-US

2009-06-15T13:45:30 -> den 15 juni 2009 13:45 sv-SE

2009-06-15T13:45:30 -> Δευτέρα, 15 Ιουνίου 2009 1:45 μμ el-GR

F

Full date pattern with long time pattern

2009-06-15T13:45:30 -> Monday, June 15, 2009 1:45:30 PM en-US

2009-06-15T13:45:30 -> den 15 juni 2009 13:45:30 sv-SE

2009-06-15T13:45:30 -> Δευτέρα, 15 Ιουνίου 2009 1:45:30 μμ el-GR

g

General date pattern with short time pattern

2009-06-15T13:45:30 -> 6/15/2009 1:45 PM en-US

2009-06-15T13:45:30 -> 15/06/2009 13:45 es-ES

2009-06-15T13:45:30 -> 2009/6/15 13:45 zh-CN

G

General date pattern with long time pattern

 2009-06-15T13:45:30 -> 6/15/2009 1:45:30 PM en-US

2009-06-15T13:45:30 -> 15/06/2009 13:45:30 es-ES

2009-06-15T13:45:30 -> 2009/6/15 13:45:30 zh-CN

M, m

Month/day pattern

2009-06-15T13:45:30 -> June 15 en-US

2009-06-15T13:45:30 -> 15. juni da-DK

2009-06-15T13:45:30 -> 15 Juni id-ID

O, o

Round-trip date/time pattern

2009-06-15T13:45:30  --> 2009-06-15T13:45:30.0000000-07:00

2009-06-15T13:45:30 --> 2009-06-15T13:45:30.0000000Z

2009-06-15T13:45:30 2009-06-15T13:45:30.0000000

2009-06-15T13:45:30-07:00 --> 2009-06-15T13:45:30.0000000-07:00

R, r

RFC1123 pattern

2009-06-15T13:45:30 -> Mon, 15 Jun 2009 20:45:30 GMT

s

Sortable date/time pattern

2009-06-15T13:45:30 -> 2009-06-15T13:45:30

2009-06-15T13:45:30 -> 2009-06-15T13:45:30

t

Short time pattern

2009-06-15T13:45:30 -> 1:45 PM en-US

2009-06-15T13:45:30 -> 13:45 hr-HR

2009-06-15T13:45:30 -> 01:45 ar-EG

T

Long time pattern

2009-06-15T13:45:30 -> 1:45:30 PM en-US

2009-06-15T13:45:30 -> 13:45:30 hr-HR

2009-06-15T13:45:30 -> 01:45:30 م ar-EG

u

Universal sortable date/time pattern

2009-06-15T13:45:30 -> 2009-06-15 20:45:30Z

U

Universal full date/time pattern

2009-06-15T13:45:30 -> Monday, June 15, 2009 8:45:30 PM en-US

2009-06-15T13:45:30 -> den 15 juni 2009 20:45:30 sv-SE

2009-06-15T13:45:30 -> Δευτέρα, 15 Ιουνίου 2009 8:45:30 μμ el-GR

Y, y

Year month pattern

2009-06-15T13:45:30 -> June, 2009 en-US

2009-06-15T13:45:30 -> juni 2009 da-DK

2009-06-15T13:45:30 -> Juni 2009 id-ID

That is all there is to using .NET date format specifiers. Date Time Week will continue tomorrow when I will talk about more cool stuff.

I invite you to follow me on Twitter and Facebook. If you have any questions, send email to me at [email protected], or post your questions on the Official Scripting Guys Forum. See you tomorrow. Until then, peace.

Ed Wilson, Microsoft Scripting Guy

blogs.technet.microsoft.com