PowerShell — Дата и Время — saw-friendship
DateTime: The truth is out there…
Так, у меня есть 30 дней для оплаты штрафа. А какое сегодня число? Ой, а месяц-то какой? Кажется февраль… А год не високосный ли?
Да, наплевать! Есть же (Get-Date).AddDays(30) !!
Далее небольшая история и много примеров работы с классом [DateTime], которые вам обязательно пригодятся, раз вы сюда попали
Когда я только начинал изучать PowerShell, я увидел много интересных и непонятных вещей, но именно класс [DateTime] был самым непонятным, поэтому я долго пытался обходить его стороной. Наверное, это связано с тем, что для написания PowerShell скриптов какое-то время совсем необязательно знать что такое методы и функции, но [DateTime] просто заставляет в это погрузиться и оказывается, все не так сложно…
Языки программирования, которые я поверхностно изучал в институте, вероятно, позволяли пользоваться какими-то методами, создавать классы и т.д., но, вероятно, для этого нужно было написать очень много строк кода, и я не представлял, что когда-нибудь я смогу создавать небольшие программы без всяких компиляторов, студий и т.
Я думаю, что любую сущность надо прочувствовать. Я написал уже несколько десятков скриптов для ActiveDirectory, прежде чем смог сказать, что я знаю, что такое ActiveDirectory 🙂
В книгах и статьях можно найти разные объяснения про объекты, их свойства и методы. Что-то вроде следующего:
Есть дом — это объект, у него есть длина, ширина, высота — это свойства. У него есть и метод — звонок, нажми на звонок, и из дома вылетит…
Как-то не складно…
Так вот чтобы почувствовать что PowerShell — это ООП, почувствовать его мощь и попробовать понять что это такое и зачем это нужно в скриптовом языке, давайте обратимся за помощью к классу [DateTime]
В PowerShell есть много типов данных, проверить тип данных какого-то конкретного экземпляра можно с помощью метода GetType. Создадим переменную $Date и присвоим ей значение — текущую дату:
$Date = Get-Date
Убедимся что переменная $Date теперь представляет собой экземпляр класса [DateTime]
PS> $Date.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True DateTime System.ValueType PS>
Свойства:
Что бы просмотреть свойства объекта, можно передать его по конвейеру в командлет select
PS> $Date | select * DisplayHint : DateTime DateTime : 17 июля 2017 г. 17:06:47 Date : 17.07.2017 0:00:00 Day : 17 DayOfWeek : Monday DayOfYear : 198 Hour : 17 Kind : Local Millisecond : 78 Minute : 6 Month : 7 Second : 47 Ticks : 636359080070781099 TimeOfDay : 17:06:47.0781099 Year : 2017 PS>
Теперь мы поняли, что то, что мы видим на выходе командлета Get-Date, это просто удобное представление времени, но на самом деле это не строка, а объект, у которого есть свойства и к этим свойствам можно обратиться через точку. Например:
PS> $Date. Date 17 июля 2017 г. 0:00:00 PS> $Date.DayOfWeek Monday PS> PS>
Методы:
$Date | Get-Member
С помощью Get-Member (чаще я использую алиас gm), мы видим методы, применяемые к классам. Метод — это функция, которая может принимать на вход аргументы. Если сравнить это со свойствами, которые показаны выше, то можно заметить что свойство DayOfWeek не может принимать никакие аргументы, они здесь не нужны, т.к. это свойство просто выводит день недели. Методы отличаются от свойств тем, что они выполняют какие-то действия.
В данном случае у нас класс [DateTime], посмотрим его методы через Get-Member (результат довольно большой, показывать не буду, выполняйте сами). Сейчас нам нужны только методы, поэтому уточним запрос:
$Date | Get-Member -MemberType Method
Теперь мы видим только методы. Выберем какой-нибудь из них, например AddDays.
Из названия метода AddDays понятно, что можно «добавить день».
Итак мы решили воспользоваться методом AddDays, а когда смотрели Get-Member, то в Definition видели «double value» (число с плавающей запятой, см. типы данных). Теперь мы знаем что через точку можем обратиться к свойствам и методам, но методам можно передавать аргументы в скобках. Значит так и напишем: Экземпляр класса (объект), точка, метод, аргумент в скобках. Аргументом у нас будет число «2»,
Попробуем:
PS> $Date.AddDays(2) 19 июля 2017 г. 17:06:47 PS>
Теперь нецелое отрицательное
PS> $Date.AddDays(-1.5) 16 июля 2017 г. 5:06:47 PS>
Отлично, мы отняли полтора дня!
Это можно использовать и в командлетах:
PS# Get-EventLog -LogName Security -After (Get-Date).AddDays(-1) -Newest 3 Index Time EntryType Source InstanceID Message ----- ---- --------- ------ ---------- ------- 541 июл 17 18:05 SuccessA... Microsoft-Windows... 4801 Разблокирована рабочая станция. ... 540 июл 17 17:28 SuccessA... Microsoft-Windows... 4800 Заблокирована рабочая станция.... 539 июл 17 16:12 SuccessA... Microsoft-Windows... 4801 Разблокирована рабочая станция.... PS#
PS# ls $env:USERPROFILE\Desktop | ? {$_.LastWriteTime -ge (Get-Date).AddDays(-1)} Каталог: C:\Users\User\Desktop Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 17.07.2017 1:20 script2.1 -a---- 16.07.2017 23:24 3234 script1.ps1 -a---- 16.07.2017 23:16 1660 readme.txt PS#
Во многих командлетах на вход принимается именно дата, причем дата может быть указана и в виде текста (правда лучше так не делать).
PS> Function When { >> param( >> [Parameter(Mandatory=$true)][DateTime]$Date >> ) >> >> $Date >> } PS> PS> PS> PS> PS> When -Date (Get-Date). AddDays(-1) 16 июля 2017 г. 18:56:34 PS> PS> PS> When -Date '06.16.2017 18:56:34' 16 июня 2017 г. 18:56:34 PS>
Несколько примеров создания объекта [DateTime]
В этом примере в целом все нормально, но если не указать какой-либо из параметров, то аргумент для параметра будет взят из текущей даты
Get-Date -Year 2017 -Month 12 -Day 06 -Hour 18 -Minute 55 -Second 0
Или тоже самое, но через сплаттинг
$param = @{ 'Year'=2017; 'Month'=12; 'Day'=6; 'Hour'=18; 'Minute'=55; 'Second'=0 } Get-Date @param
Через стандартное создание объекта с перегрузкой, выше я говорил, что в перегрузке методов важен порядок, поэтому если что-то упустить, то создание объекта завершится ошибкой, тем не менее, это хороший способ
New-Object DateTime (2017, 12, 06, 18, 55, 00)
Или так
[DateTime]::new(2017, 12, 06, 18, 55, 00)
Преобразование типа из string в datetime, (плохой метод)
[DateTime]'2017. 12.06 18:55:00'
Почему? Да потому что легко допустить ошибку, стоит нам написать дату так, как мы видим ее в пуске Windows, если язык системы русский, то мы получим неправильное распознавание. Простой пример:
PS> [datetime]’12.07.2017 14:55:00′
7 декабря 2017 г. 14:55:00
PS>
Мы получили 7-е декабря! Это не по-русски 🙂 Поэтому предлагаю самый правильный вариант получения даты из string, он больше всего подходит для парсинга логов, потому что он позволяет не просто отдать строку на неконтролируемое преобразование, а задать шаблон по которому преобразование производить
[DateTime]::ParseExact('2017.12.06 18:55:00','yyyy.MM.dd HH:mm:ss',$null)
В русских форматах нам достаточно двух аргументов, третий тоже необходимо указать, но тут он равен $null (если работать в одной локальной системе), но если у нас разные системы на разных языках, мы можем заставить PowerShell выводить или принимать дату на любом языке. Нам придется чуть-чуть углубиться в еще один класс [System. Globalization.CultureInfo] или сокращенно [CultureInfo]
Третий аргумент отвечает за языковые особенности формата дат, а его тип «CultureInfo»
Текущая культура
PS> [CultureInfo]::CurrentCulture LCID Name DisplayName ---- ---- ----------- 1049 ru-RU Русский (Россия) PS>
Американская культура
PS> [CultureInfo]::GetCultureInfo('en-US') LCID Name DisplayName ---- ---- ----------- 1033 en-US Английский (США) PS>
Выведем дату в американском формате
PS> (Get-Date).ToString([CultureInfo]::GetCultureInfo('en-US')) 7/18/2017 3:27:35 PM PS>
А теперь преобразуем строку с полученной выше датой обратно в объект
PS> $str = (Get-Date). ToString([cultureinfo]::GetCultureInfo('en-US')) PS> PS> $str 7/18/2017 3:30:40 PM PS> PS> PS> [datetime]::ParseExact($str, 'M/d/yyyy h:m:s tt', [cultureinfo]::GetCultureInfo('en-US')) 18 июля 2017 г. 15:30:40 PS>
Сравнение:
В скриптах нам часто требуется сравнивать две даты между собой или сортировать по дате. PowerShell позволяет сравнивать даты как будто это числа (хотя так оно, конечно, и есть).
Обращаю внимание на то, что заключаю командлет в скобки для того, чтобы как в математике, сначала выполнять операцию в скобках, ведь очевидно, что нельзя один командлет вычесть из другого, но их результаты — это уже конкретные значения, над которыми можно проводить операции вычитания, сложения и т.д..
Убедимся:
PS> (Get-Date) -lt (Get-Date).AddSeconds(1) True PS> PS> PS> (Get-Date) -gt (Get-Date).AddSeconds(1) False PS> PS>
Сортировка:
PS> 1..3 | % {[DateTime]::new(2017, 12, 06, 18, 55, $_)} | Sort-Object -Descending 6 декабря 2017 г. 18:55:03 6 декабря 2017 г. 18:55:02 6 декабря 2017 г. 18:55:01 PS>
Вычитание дат:
В жизни мы иногда задаемся вопросом: «Сколько же с тех пор времени прошло?», и даже не верится, что в PowerShell такую операцию можно совершить с помощью знака минус, но как бы это ни казалось чудом, это возможно 🙂
Результатом вычитания двух дат будет объект класса [TimeSpan] (следует понимать как временной интервал)
PS> (Get-Date) - (Get-Date).AddDays(-3) Days : 3 Hours : 0 Minutes : 0 Seconds : 0 Milliseconds : 0 Ticks : 2592000000000 TotalDays : 3 TotalHours : 72 TotalMinutes : 4320 TotalSeconds : 259200 TotalMilliseconds : 259200000 PS>
Кстати убедимся, что это действительно [TimeSpan]
PS> $TimeSpan = (Get-Date) - (Get-Date).AddDays(-3) PS> $TimeSpan.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True TimeSpan System. ValueType PS>
А теперь самое интересное: две даты конечно сложить нельзя, но к дате можно прибавить TimeSpan
PS> (Get-Date) + $TimeSpan 21 июля 2017 г. 1:15:33 PS>
Причем к TimeSpan нельзя прибавить дату, это не совсем математика, от перестановки слагаемых вы получите ошибку. Это вызвано невозможностью преобразования типа данных.
Создать объект класса TimeSpan можно несколькими способами, вот 3 варианта на выбор:
[TimeSpan]::new(0,1,0,0,0)
New-Object TimeSpan (0,1,0,0,0)
[TimeSpan]::FromHours(1)
Как видим, результат один и тот же:
PS> $Date + [TimeSpan]::new(0,1,0,0,0) 17 июля 2017 г. 18:06:47 PS> PS> $Date + (New-Object TimeSpan (0,1,0,0,0) ) 17 июля 2017 г. 18:06:47 PS> PS> $Date + [TimeSpan]::FromHours(1) 17 июля 2017 г. 18:06:47 PS>
Форматирование
Нам потребуется метод ToString
Сначала несколько слов в продолжение о TimeSpan, по умолчанию TimeSpan форматирует вывод следующим образом:
PS> $TimeSpan = [TimeSpan]::new(0,3,0,0,0) PS> $TimeSpan. ToString() 03:00:00 PS> PS> PS> $TimeSpan = [TimeSpan]::new(1,3,0,0,0) PS> $TimeSpan.ToString() 1.03:00:00 PS>
Видим неприятный момент, если TimeSpan меньше одного дня, то день вообще не попадает в вывод, у нас есть возможность указать свой формат, но лучше заранее знать разрядность количества дней. Для этого мы должны передать методу ToString аргумент в виде строки (примеры тут):
PS> $TimeSpan.ToString('dd\.hh\:mm\:ss') 01.03:00:00 PS> PS> $TimeSpan.ToString('ddd\.hh\:mm\:ss') 001.03:00:00 PS>
Можно вставлять любые символы, но их обязательно нужно экранировать с помощью «\» (backslash)
PS> $TimeSpan.ToString('\d\:ddd\.\h\:hh\.\m\:mm\.\s\:ss') d:001.h:03.m:00.s:00 PS> PS>
Вернемся к DateTime, мы уже видели пример работы метода ToString, где аргументом у нас служил объект CultureInfo, но надо сказать, что никто не загоняет вас в рамки, аргументом может служить и строка.
Пожалуйста:
PS> (Get-Date). ToString('ddd, dd.MM.yyyy') Вт, 18.07.2017 PS> PS> (Get-Date).ToString('ddd, dd.MM.yyyy', [cultureinfo]::GetCultureInfo('en-US')) Tue, 18.07.2017 PS>
Или так:
PS> (Get-Date).ToString('hh:mm, ddd, dd MMM yyyy') 03:46, Вт, 18 июл 2017 PS> PS> PS> (Get-Date).ToString('hh:mm tt, ddd, dd MMM yyyy', [cultureinfo]::GetCultureInfo('en-US')) 03:46 PM, Tue, 18 Jul 2017 PS>
На последок бонус)))
Метод определения дней в месяце и проверки високосного года
PS> [DateTime]::DaysInMonth(2017,07) 31 PS> PS> [DateTime]::IsLeapYear(2016) True PS>
На этом все. Этой темы мы еще будем касаться, а пока можете попробовать придумать как рассчитать ваш возраст. В одной из следующих статей я расскажу вам о том, как решал ее я.
# ——————-
Статья написана после анализа интересов людей, пытающихся найти помощь по PowerShell в интернете. Больше всего кликов было на один из моих первых постов, который представлял собой маленький черновик по [DateTime] с примерами и особо без объяснений 🙂
Понравилось это:
Нравится Загрузка. ..
Get-Date — примеры работы с датой в Powershell
Get-Date возвращает в Powershell дату и время. С помощью этого командлета мы можем получить нужное нам значение формата Datetime, что поможет нам выполнять, например, сравнение дат.
Т.е. выполнение команды без ключей вернет нам текущую дату в powershell:
Get-Date
Если нам нужно получить какую-то другую дату формата Datetime, то надо установить ее с помощью этого команды:
Get-Date -Year 2030 -Month 8 -Day 9 -Hour 10 -Minute 11 -Second 12
Если мы не установим какое-то значение, например Year (год), то он возьмется текущий.
Получим свойства и методы этого объекта:
Get-Date | Get-Member
Все методы — это то что мы можем сделать с датой. Для примера получим дату минус один день от сегодняшнего числа:
(Get-Date).AddDays(-1)
Или прибавить дни через AddDays:
$result = (Get-Date).AddDays(365)
Если мы прибавим, допустим, часы больше чем в сутках, то у нас изменится и день:
$result = (Get-Date).AddHours(30)
Таким же образом мы можем добавлять и убирать такие элементы дат:
- AddDays — дни
- AddHours — часы
- AddMilliseconds — миллисекунды
- AddMinutes — минуты
- AddMonths — месяца
- AddSeconds — секунды
- AddYears — года
Так же как и во всех других языках мы можем преобразовать тип даты. Для того что бы преобразовать в строку у нас есть несколько методов:
- ToLongDateString — строка с днем недели и именем месяца
- ToLongTimeString — показывает часы, минуты и время
- ToShortDateString — возвращает только дату
- ToShortTimeString — вернет только часы и минуты
- ToString — вернут полную дату и время
Каждый из этих методов вызывается так:
(Get-Date). ToLongDateString()
Или на примере какой-то другой даты с переменной:
$yesterday = Get-Date -Month 6 -Year 2225
$yesterday.ToLongDateString()
Для того что бы получить дату из строки нужно использовать ключ date:
Get-Date -Date "1/1/2019"
Если мы не установим время или дату, то значение возьмется текущее:
Get-Date -Date "10:15"
Нужно учитывать, что формат даты в таком варианте исполнения будет тем, который установлен в системных настройках. В моем случае американский и поэтому идет месяц, день, год. Если стоит русский будет день, месяц и год. Увидеть эту настройку можно так:
Get-WinSystemLocale
Возможно получить только день недели или час от времени и для этого нужно использовать Format или один из методов. Так я получу год:
Get-Date -Format "yyyy"
Или аналогично, но уже используя свойство:
(Get-Date).year
Используя Format всегда возвращается тип данных string, а не DateTime.
У нас есть еще множество свойств, кроме Year, которые мы можем получать:
Выведем день недели ( DayOfWeek):
(Get-Date).DayOfWeek
Обратите внимание, что не всегда возвращаемый объект типа DateTime. Он может быть и численным (int) или строковым, в случае с Format.
На примере Format есть много спецификаторов:
- dddd — день недели в виде имени
- MM — номер месяца
- dd — день месяца
- yyyy — год
- HH:mm — часы и минуты
- K — Часовой пояс
- ss — секунды
Так мы выведем дату формата часы, минуты, день, месяц и год:
Get-Date -Format "HH:mm dd/MM/yyyy"
Обращаете внимание на регистр иначе получим другие значение.
Выполнять сравнение дат можно в случае, если значение типа DateTime. Какого типа значение мы можем посмотреть двумя способами. При просмотра свойства объекта мы увидим какого типа он возвращает значение:
Get-ChildItem | Get-Member | Where-Object -Property Definition -Like "*datetime*"
Либо у получить это значение так:
(Get-Date).GetType()
Для примера сравним в powershell даты файла. На картинке выше видно, что у каждого файла есть свойство CreationTime формата DateTime. Сравним какие файлы были созданы за последние 15 дней:
Get-ChildItem -Path ".\Folder2\" | where -Property CreationTime -GT (Get-Date).AddDays(-15)
GT — говорит о том, что мы ищем значения только больше чем справа. Обо всех операторах сравнения мы говорили тут.
Мы можем сравнивать и только по дню месяца, но в случае ниже день месяца будет числом, а не датой:
Get-ChildItem -Path C:\Folder2\ | Where-Object {$_.CreationTime.Day -eq (Get-Date).Day}
Командлет Get-ChildItem мы рассматривали тут.
Один из интересных примеров в работе с датой это командлет New-TimeSpan, который вернет время работы сервиса или любого другого объекта, если передать ему время. Для примера так он вернет значение в минутах, секундах с установленной даты:
New-TimeSpan -Start (Get-Date).AddDays(-15)
Применение этому можно найти, например, открытым пользователями через SMB файлам или очень долго запущенным процессам.
На примере процессов:
…
Теги: #powershell
PowerShell 🚀 — Get-Date -FromUnixTime должен поддерживать отрицательные значения.
Краткое описание новой функции / улучшения
PR # 12179 добавил параметр FromUnixTime в команду Get-Date.
В PowerShell 7.1.0-preview.3 следующая команда вызывает ошибку.
PS /> Get-Date -Date -1 -FromUnixTime
Get-Date: Cannot bind parameter 'Date'. Cannot convert value "-1" to type "System. DateTime". Error: "String '-1' was not recognized as a valid DateTime."
Эта команда должна поддерживать отрицательное время unix.
В Ubuntu следующие команды не возвращают ошибку.
$ date --date "@-1"
Wed Dec 31 23:59:59 UTC 1969
Предлагаемые детали технической реализации (необязательно)
Параметр Date команды Get-Date имеет тип DateTime . Если этому параметру передается целочисленное значение, оно будет интерпретировано как тики . Это должно быть положительное значение.
Другими словами, следующий код недействителен.
PS /> [datetime] -1
InvalidArgument: Cannot convert value "-1" to type "System.DateTime". Error: "Ticks must be between DateTime.MinValue.Ticks and DateTime.MaxValue.Ticks. (Parameter 'ticks')"
Время Unix может принимать отрицательное значение, что означает, что оно предшествует эпохе Unix.
Чтобы параметр Date мог принимать отрицательное целое число, необходимо изменить тип этого параметра на long.
Но это переломное изменение.
Я думаю, что параметр FromUnixTime должен иметь возможность принимать значение, как было предложено в # 11719 .
Area-Cmdlets-Utility Issue-Question Resolution-FixedОтображение объектов TimeSpan с использованием композитного форматирования – Hey, Scripting Guy! Blog — sergey vasin
Резюме: Используем 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
Команда и ее вывод представлены на рисунке.
Таким образом, если мне нужно узнать количество часов между значениями двух объектов 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.
Пример использования этих форматов приведен на рисунке.
Заметка: Более полную информацию о композитном форматировании вы можете найти в статье 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.
Автор:
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
Демистифицируя даты, DateTime и форматирование PowerShell
PowerShell может делать много вещей, и, как любой хороший язык программирования, он может делать с датами все, что угодно. Используя команду PowerShell Get-Date
и другие методы, вы можете найти сегодняшнюю дату, завтрашнюю дату, форматировать даты и многое другое.
Из этой статьи вы узнаете все о датах и PowerShell!
Предварительные требования
Чтобы следовать примерам из этой статьи, убедитесь, что у вас есть следующие предварительные условия, которые выполнены заранее:
- Windows PowerShell v5 или более поздней версии. Даже если вы используете более раннюю версию, все примеры, вероятно, будут работать нормально.
Определение текущей даты с помощью PowerShell
Один из самых простых способов узнать текущую дату с помощью PowerShell — использовать командлет Get-Date
. Эта команда отображает текущую дату и время, как показано ниже.
PS> Дата получения
22 ноября 2020 г. 1:25:57
По умолчанию Get-Date
выглядит так, будто возвращает только текущую дату и время, но на самом деле возвращает гораздо больше информации.Чтобы найти эту информацию, передайте выходные данные командлету Format-List
, как показано ниже.
PS> Дата получения | Формат-Список
DisplayHint: DateTime
Дата: 22.11.2020 00:00:00
День: 22
DayOfWeek: воскресенье
DayOfYear: 327
Час: 1
Вид: Местный
Миллисекунда: 163
Минуты: 26
Месяц: 11
Второй: 2
Кики: 637416051621635773
TimeOfDay: 01: 26: 02.1635773
Год: 2020
Дата и время: 22 ноября 2020 г., воскресенье, 1:26:02
Вы также можете использовать командлет
Get-Member
, чтобы найти все свойства объекта, запустивGet-Date | Get-Member -MemberType Properties
также.
Если вы проверите тип объекта, который возвращает Get-Date
, вы заметите, что это тип объекта System.DateTime
. Этот класс предоставляет все различные свойства и методы, которые вы видите. Вы можете узнать тип этого объекта, используя Get-Member
или GetType ()
, как показано ниже.
PS> (Get-Date) .GetType (). FullName
System.DateTime
Когда вы увидите все доступные свойства, вы можете ссылаться на них, используя точечную нотацию, как показано ниже.
PS> (Дата получения). Год
2020 г.
PS> (Get-Date) .DayOfWeek
Воскресенье
PS> (Get-Date) .Month
11
PS> (Get-Date) .DayOfYear
327
Точечная нотация кажется вам слишком «девственной»? Если это так, вы также можете использовать параметр DisplayHint
для достижения того же результата.
PS> Get-Date -DisplayHint Date
Воскресенье, 22 ноября 2020 г.
PS> Get-Date -DisplayHint Время
2:29:35 утра
PS> Get-Date -DisplayHint DateTime
22 ноября 2020 г. 2:29:39
Использование Get-Date
— это самый простой способ найти текущую дату и различные атрибуты, но вы можете сделать гораздо больше!
Арифметика даты с PowerShell
Допустим, вам нужно знать дату и / или время определенного количества дней, лет или минут в прошлом или будущем.Вы можете найти эту информацию, используя методы.
Использование методов
DateTime
Объект System.DateTime
, который возвращает Get-Date
, имеет различные методы, которые можно вызывать для добавления или удаления отрезков времени. Если вы запустите Get-Date | Get-Member
, вы увидите различные методы, которые начинаются с Добавить
.
AddDays Метод datetime AddDays (двойное значение)
AddHours Метод datetime AddHours (двойное значение)
AddMilliseconds Метод datetime AddMilliseconds (двойное значение)
AddMinutes Метод datetime AddMinutes (двойное значение)
AddMonths Метод datetime AddMonths (целые месяцы)
AddSeconds Метод datetime AddSeconds (двойное значение)
AddTicks Метод datetime AddTicks (длинное значение)
AddYears Метод datetime AddYears (значение типа int)
Вы можете вызвать каждый из этих методов, чтобы найти дату / время в будущем или в прошлом.Ниже вы увидите несколько примеров вызова каждого из этих методов и их результатов.
# Добавление 8 дней к текущей дате
PS> (Get-Date) .AddDays (8)
30 ноября 2020 г. 1:59:39
# Добавляем 3 часа к текущему времени
PS> (Get-Date) .AddHours (3)
22 ноября 2020 г. 4:59:51
# Добавление пяти лет к текущей дате
PS> (Get-Date) .AddYears (5)
Суббота, 22 ноября 2025 г., 2:00:11
# Вычитание 8 дней из текущей даты с использованием отрицательного числа.
PS> (Get-Date).AddDays (-8)
Суббота, 14 ноября 2020 г., 2:02:43
Использование
New-Timespan
Что, если бы вы хотели узнать разницу между двумя датами; а не просто добавление определенного количества временных отрезков? Один из способов сделать это — использовать командлет New-Timespan
. Командлет New-Timespan
создает объектов TimeSpan
, которые представляют разницу даты / времени или интервалы.
Используйте командлет New-TimeSpan
, указав дату / время Start
и End
в качестве параметров.Например, если вы хотите найти разницу между 23 ноября 2020 г. в полночь и 31 декабря 2020 г. в полночь, вы можете использовать следующий фрагмент кода.
Используя объекты TimeSpan
, вы можете найти разницу даты / времени практически с любым приращением, которое вам нужно.
PS> $ StartDate = Get-Date -Month 11 -Day 23 -Year 2020 -Hour 00 -Minute 00 -Second 00
PS> $ EndDate = Get-Date -Month 12 -Day 31-Year 2020 -Hour 00 -Minute 00 -Second 00
PS> $ StartDate
Понедельник, 23 ноября 2020 г., 00:00:00
PS> $ EndDate
Четверг, 31 декабря 2020 г., 00:00:00
PS> New-TimeSpan -Start $ StartDate -End $ EndDate
Дней: 38
Часы: 0
Минут: 0
Секунды: 0
Миллисекунды: 672
Тики: 32832006722080
Всего дней: 38.0000077801852
Полный час: 912.000186724444
Всего минут: 54720.0112034667
Всего секунд: 3283200.672208
TotalMilliseconds: 3283200672.208
Сравнение дат
Вы можете не только найти различия в дате и времени, но и сравнить их с помощью стандартных операторов PowerShell. PowerShell знает, когда дата «меньше» (раньше) или «больше» (позже) другой даты.
Для сравнения дат просто создайте два объекта DateTime
, используя Get-Date
или, возможно, преобразовав строки с [DateTime]
, а затем используя стандартные операторы PowerShell, такие как lt
или gt
.
Ниже вы можете увидеть простой пример сравнения дат.
# Объявление даты
PS> $ Date1 = (Get-Date -Month 11 -Day 14-Year 2020)
PS> $ Date2 = Get-Date
PS> $ Date1 -lt $ Date2
Истинный
Преобразование (преобразование) строк в объекты DateTime
PowerShell также может отображать даты в различных форматах. Например, предположим, что у вас есть файл CSV или электронная таблица с различными датами, определенными в формате, который вы видите ниже в столбце date_time_utc
.В настоящее время используется формат ГГГГ-ММ-ДДTчч: мм: сс.0000000Z
.
Вы хотите проанализировать этот файл и найти все строки с датой семи дней или старше.
Пример формата даты PowerShell по умолчанию не знает, что 2020-09-07T13: 35: 08.4780000Z
— это дата и время; он просто думает, что это простая строка. Чтобы PowerShell понял, вы должны сначала преобразовать его в объект DateTime
, например, Get-Date
, возвращаемый.
Чтобы преобразовать строку в объект DateTime
, перед строкой (или переменной) укажите [DateTime]
.Когда вы это делаете, PowerShell пытается интерпретировать строку как дату и время, а затем предоставляет вам все свойства и методы, доступные для этого типа объекта.
PS> $ Date = "2020-09-07T13: 35: 08.4780000Z"
PS> [DateTime] $ Date
Понедельник, 7 сентября 2020 г., 13:35:08
Форматирование даты PowerShell
Теперь, когда вы знаете об основных методах использования дат, пора глубже погрузиться в тему. Давайте еще немного поиграем, используя разные форматы для отображения дат.
Всякий раз, когда вы запускаете Get-Date
, вы увидите вывод вроде Monday, September 7, 2020 13:35:08 PM
. Эти выходные данные фактически представляют собой объект DateTime
со свойствами и методами; не простая строка. Но вы можете преобразовать этот объект DateTime
в строку и представить его по-разному, используя различные методы форматирования даты.
DateTime
Методы Один из способов изменить способ отображения объекта DateTime
— использовать методы объекта DateTime
.Объект DateTime
имеет четыре метода, которые можно использовать для изменения форматирования:
-
ToLongDateString ()
-
ToShortDateString ()
-
ToLongTimeString ()
-
ToShortTimeString ()
String () методы ниже. PS> [DateTime] $ Date = $ Date
PS> $ date.ToShortDateString () + "" + $ date.ToShortTimeString ()
07.09.2020 19:05
Формат
Параметр Один из способов изменить формат даты объекта DateTime
- использовать Get-Date
для создания объекта и параметр Format
для изменения формата. Параметр Format
принимает строку символов, каждый из которых представляет, как должна выглядеть строка даты / времени.
Вы можете увидеть несколько примеров символов, которые можно использовать с параметром Формат
.
# Для отображения полного шаблона даты с коротким шаблоном времени
PS> Get-Date -Format f
22 ноября 2020 г. 4:26
# Для отображения полного шаблона даты с длинным шаблоном времени
PS> Get-Date -Format F
22 ноября 2020 г. 4:26:31
# Для отображения шаблона короткой даты
PS> Get-Date -Format d
22.11.2020
# Для отображения длинного шаблона даты
PS> Get-Date -Format D
Воскресенье, 22 ноября 2020 г.
# Год месяц шаблон
PS> Get-Date -Format Y
Ноябрь 2020
## Объединение символов формата
PS> Get-Date -Format "dddd dd-MM-yyyy HH: mm K"
Воскресенье 22-11-2020 03:41 +05: 30
Ознакомьтесь с документацией Microsoft, чтобы получить полную разбивку всех символов, которые вы можете использовать с параметром Format
.
Как только вы используете параметр Format
, вы увидите, что Get-Date
больше не возвращает объект DateTime
, а теперь представляет собой строку.
PS> (Get-Date -Format D) .GetType (). FullName
System.String
UFormat
Параметр Подобно параметру Format
, у вас также есть параметр UFormat
с командлетом Get-Date
. Параметр UFormat
позволяет определять форматы даты с помощью форматирования даты UNIX.
Параметр UFormat
аналогичен параметру Формат
в том, что вы можете комбинировать символы формата даты, чтобы изменить способ возврата даты в виде строки. Например, попробуйте следующие форматы и посмотрите, что вернули.
PS> Get-Date -UFormat% A
PS> Get-Date -UFormat% b
PS> Get-Date -UFormat% B
Вы также можете комбинировать эти символы формата даты. В приведенном ниже фрагменте кода используются символы d
, m
и Y
для возврата даты в формате дд-мм-гггг, а
использует символ r
для возврата времени в 12-часовом формате с использованием часовой пояс т
симв.
PS> Get-Date -UFormat "% d-% m-% Y% r% Z"
22-11-2020 18:10:55 +05
Ознакомьтесь с документацией Microsoft, чтобы получить полную разбивку всех символов, которые вы можете использовать с параметром UFormat
.
Как отформатировать DateTime в PowerShell
Как отформатировать DateTime в PowerShell - qaru Присоединяйтесь к Stack Overflow , чтобы учиться, делиться знаниями и строить свою карьеру.
Спросил
Просмотрено
549k раз
Я могу без проблем отформатировать командлет Get-Date
:
$ date = Get-Date -format "ггггММдд"
Но если у меня есть дата в переменной, как мне ее отформатировать? Выписка ниже
$ dateStr = $ date -format "гггММдд"
возвращает эту ошибку:
"Вы должны предоставить выражение значения
в правой части "-f"
оператор "
"
Питер Мортенсен 28.6k2121 золотой знак9595 серебряных знаков123123 бронзовых знака
Создан 12 фев.
Ev.Ev. 6,33
золотых знаков4949 серебряных знаков8484 бронзовых знака 2 То же, что и в.НЕТТО:
$ DateStr = $ Date.ToString ("ггггММдд")
или:
$ DateStr = '{0: yyyyMMdd}' -f $ Date
Питер Мортенсен 28.6k2121 золотой знак
Создан 12 фев.
ДжошДжош 64.1,977 золотых знаков133133 серебряных знака151151 бронзовых знаков
1 На вопрос дан ответ, но отсутствует дополнительная информация:
Переменная в сравнении с командлетом
У вас есть значение в переменной $ Date
, и оператор -f
работает в следующей форме: 'строка формата' -f значения
.Если вы вызываете Get-Date -format "yyyyMMdd"
, вы вызываете командлет с некоторыми параметрами. Значение «yyyyMMdd» - это значение параметра Format
(попробуйте help Get-Date -param Format
).
-f
оператор
Есть много форматных строк. Посмотрите хотя бы на часть1 и часть2. Она использует string.Format ('форматная строка', значения ')
. Думайте об этом как о «строка формата» -f значения
, потому что оператор -f
работает очень похоже на строку .Метод форматирования
(хотя есть некоторые отличия (для получения дополнительной информации см. Вопрос в Stack Overflow: Как точно работает RHS оператора -f PowerShell? ).
DixonD 1,944 44 золотых знака2828 серебряных знаков5050 бронзовых знаков
Создан 12 фев.
Стейстей 26.8k1111 золотых знаков6565 серебряных знаков9898 бронзовых знаков
1 Простой и приятный способ:
$ time = (Get-Date) .ToString ("yyyy: MM: dd")
Создан 19 авг.
4 Очень удобное - но, вероятно, не слишком эффективное - решение - использовать функцию-член GetDateTimeFormats ()
,
$ d = Дата получения
$ d.GetDateTimeFormats ()
Это выводит большой строковый массив стилей форматирования для значения даты. Затем вы можете выбрать один из элементов массива с помощью оператора []
, например,
PS C: \> $ d.GetDateTimeFormats () [12]
Dienstag, 29 ноября 2016 г. 19.14
Питер Мортенсен 28.6k2121 золотой знак
Создан 29 ноя.
Давид 12.4k11 золотой знак3434 серебряных знака6565 бронзовых знаков
Вы можете сделать следующее:
$ date.ToString ("yyyyMMdd")
Дэвид Хай 12.4k11 золотых знаков3434 серебряных знака6565 бронзовых знаков
Создан 12 фев.
Джон УэлдонДжон Уэлдон 37.3k1010 золотых знаков9191 серебряный знак125125 бронзовых знаков
1 Сделайте это, если вам абсолютно необходимо использовать опцию -Format
:
$ dateStr = Get-Date $ date -Format "yyyMMdd"
Однако
$ dateStr = $ date.toString ('гггММдд')
, наверное, эффективнее.. 🙂
mklement0 1,947 22 золотых знака
Создан 23 мая '17 в 14: 112017-05-23 14:11
tplivetplive 55799 серебряных знаков1414 бронзовых знаков
2 Мне нужно время и небольшая вариация формата.Это отлично подходит для моих целей:
$ ((get-date) .ToLocalTime ()). ToString ("гггг-ММ-дд ЧЧммсс")
2019-08-16 215757
Согласно @ mklement0 в комментариях, это должно дать тот же результат:
(дата получения) .ToString ("гггг-ММ-дд ЧЧммсс")
Создан 16 авг.
ДЖОАТМОН 15.8k3131 золотой знак100100 серебряных знаков189189 бронзовых знаков
0 Для тех, кто пытается отформатировать текущую дату для использования в заголовке HTTP , используйте формат «r» (сокращение от RFC1123), но будьте осторожны ...
PS C: \ Users \ Me> (дата получения) .toString ("r")
Чт, 16 мая 2019 09:20:13 GMT
PS C: \ Users \ Me> get-date -format r
Чт, 16 мая 2019 09:21:01 GMT
PS C: \ Users \ Me> (дата получения).ToUniversalTime (). ToString ("r")
Чт, 16 мая 2019 16:21:37 GMT
Т.е. Не забудьте использовать «ToUniversalTime ()»
Создан 16 мая '19 в 18: 302019-05-16 21:30
Питер ЛПетер L 2,155212 серебряных знаков2525 бронзовых знаков
1 Если у вас есть здесь, чтобы использовать это в cmd.exe
(в пакетном файле):
powershell -Command (Get-Date) .ToString ('гггг-ММ-дд')
mklement0 1,947 22 золотых знака
Создан 17 мая '17 в 13: 132017-05-17 13:13
Ярослав Заруба 4,27044 золотых знака3434 серебряных знака5050 бронзовых знаков
Вы можете просто использовать это, чтобы выбрать нужный формат, а затем вставить его везде, где это необходимо.
$ DTFormats = (Get-Date) .GetDateTimeFormats ()
$ Formats = @ ()
$ i = 0
Пока ($ i -lt $ DTFormats.Count) {
$ row = [PSCustomObject] @ {
'IndexNumber' = $ i
'DateTime Format' = $ DTFormats [$ i]
}
$ Formats + = $ row
$ i ++
}
$ DTSelection = ($ Formats | Out-GridView -OutputMode Single -Title 'Выбрать формат даты и времени'). IndexNumber
$ MyDTFormat = "(Get-Date) .GetDateTimeFormats () [$ DTSelection]"
Запись-хост ""
Write-Host «Используйте следующий фрагмент кода, чтобы получить выбранный формат DateTime:»
Write-Host "$ MyDTFormat" -ForegroundColor Green
Запись-хост ""
$ MyDTFormat | Клип
Write-Host "Фрагмент кода скопирован в буфер обмена.Вставьте фрагмент в нужное место ".
ответ дан 28 мая в 21:54
Форматируйте дату и время в соответствии с потребностями вывода
Если вы хотите отформатировать дату и присвоить строку переменной.Я объединил PowerShell и .NET, чтобы обеспечить гибкость.
$ oDate = '{0}' -f ([system.string] :: format ('{0: yyyyMMddHHmmss}', (Get-Date)))
Как это работает
- Оператор PowerShell - '{0}' -f (.....)
- . Нотация .NET - [system.string] :: format (' customformat ', InputObject )
- Настраиваемый формат путем объединения PowerShell с .NET - '{0: yyyyMMddHHmmss}'
- Входной объект, предоставляемый командлетом PowerShell - (Get-Date)
- Сохраняется в переменной PowerShell - $ oDate
Пример
Если дата и время выполнения были понедельник, 5 июля 2021 г., 17:45:22 (формат '{0: F}').
Использование кода
Вы можете настроить строку в соответствии с вашими требованиями, изменив «yyyMMddHHmmss», используя пользовательскую нотацию даты и времени Microsoft .NET.
ответ дан 3 июл в 16:44
по умолчанию
Stack Overflow лучше всего работает с включенным JavaScript Ваша конфиденциальность
Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Принимать все файлы cookie
Настроить параметры
Форматирование DateTime - Советы по работе - Советы по работе
Всякий раз, когда у вас есть истинное DateTime (а не строка, например), у вас есть множество эффективных способов форматирования.Вы можете напрямую получить объекты DateTime:
PS> $ installDate = (Get-CimInstance -Class Win32_OperatingSystem) .InstallDate
PS> $ installDate.GetType (). FullName
System.DateTime
Или вы можете преобразовать строку в DateTime:
PS> $ psconf = Get-Date -Date '2019-06-04 09:00'
PS> $ psconf.GetType (). FullName
System.DateTime
Если у вас есть объект DateTime, используйте метод ToString () и укажите один или два аргумента.
Первый аргумент определяет, какие части даты вы хотите видеть, и использует эти (с учетом регистра!) Заполнители:
г Год
М Месяц
d День
Час
м Минуты
с Секунда
f Миллисекунда
Чем больше заполнителей вы укажете, тем больше деталей вы получите:
PS> (Get-Date).ToString ('дд')
30
PS> (Get-Date) .ToString ('ддд')
Так
PS> (Get-Date) .ToString ('дддд')
Sonntag
PS>
(как видите, PowerShell использует ваш язык по умолчанию, которым в этом примере был немецкий)
Чтобы вывести DateTime в формате ISO, попробуйте следующее:
PS> $ installDate = (Get-CimInstance -Class Win32_OperatingSystem) .InstallDate
PS> $ installDate.ToString ('гггг-ММ-дд ЧЧ: мм: сс')
2018-06-08 18:24:46
PS>
Если вы хотите также указать языковой стандарт (язык), укажите CultureInfo в качестве второго параметра:
PS> (Get-Date).ToString ('dddd', [System.Globalization.CultureInfo] 'en-us')
Воскресенье
PS> (Get-Date) .ToString ('dddd', [System.Globalization.CultureInfo] 'zh')
星期日
PS> (Get-Date) .ToString ('dddd', [System.Globalization.CultureInfo] 'es')
Доминго
PS> (Get-Date) .ToString ('dddd', [System.Globalization.CultureInfo] 'fr')
диманче
PS>
Если вам интересно, каков идентификатор культуры для данной культуры, попробуйте следующее:
PS> [System.Globalization.CultureInfo] :: GetCultures («Установлено») | Out-GridView -PassThru
psconf.eu - PowerShell Conference EU 2019 - 4-7 июня, Ганновер, Германия - посетите www.psconf.eu Существует не так уж много тренингов для опытных скриптеров PowerShell, где вы действительно все еще узнаете что-то новое. Но есть одно место, которое нельзя пропустить: PowerShell Conference EU - с 40 известными международными докладчиками, включая членов команды PowerShell и MVP, а также 350 профессиональных и творческих сценаристов PowerShell. Регистрация открыта на сайте www.psconf.eu, и скоро станет доступна полная трехдневная программа на 4 дня.Раз в год это просто умный шаг - собраться вместе, обновить ноу-хау, узнать о безопасности и смягчении последствий, а также принести домой свежие идеи и авторитетные рекомендации. Мы будем рады видеть вас и слышать от вас!
Повторите этот совет в Твиттере!
Работа с датами в PowerShell: советы и рекомендации
Когда я пишу сценарии PowerShell, я часто обнаруживаю, что мне нужно указать дату. Например, я иногда писал сценарии, которые извлекают журналы событий Windows с определенной даты, или сценарии, которые архивируют данные о старении на основе даты создания файла.Это всего лишь пара примеров того, как может потребоваться ссылка на дату в сценарии PowerShell. В этой статье я хочу показать вам несколько приемов работы с датами в PowerShell.
Получение даты
Заставить PowerShell отображать текущую дату просто. Для этого просто введите командлет Get-Date. Если вам нужно отобразить дату определенным образом, PowerShell предлагает несколько различных вариантов для этого. Самый простой способ - использовать подсказку на экране.Параметр DisplayHint может иметь значение Date, Time или DateTime. На изображении ниже показано, как работает основной командлет Get-Date, а также несколько примеров использования параметра DisplayHint.
Если вам нужно немного больше контроля над выводом, вы можете использовать параметр Format или параметр UFormat. Параметр Формат в основном используется, когда вам нужно указать дату в определенном формате для сравнения. Мы не будем использовать параметр Format в этой статье, но все же рекомендуется знать о его существовании.
Параметр UFormat больше используется для отображения. Это позволяет вам расположить различные элементы, составляющие дату и время, по вашему выбору. Все, что вам нужно сделать, это добавить различные символы форматирования к параметру UFormat. Параметры, которые вы можете использовать, включают:
% M - Месяц (в виде числа)
% D - Дата
% Y - Год
% A - День недели
% Z - Часовой пояс, выраженный как смещение от времени UTC или зулусского времени. Например, -5 - это восточное время в США.
Ниже вы можете увидеть пример того, как работает параметр UFormat.
На изображении выше есть две вещи, на которые стоит обратить внимание. Во-первых, вы заметите, что все, что следует за параметром UFormat, заключено в кавычки. Это потому, что я не просто указываю символы форматирования, я также могу использовать текст. На рисунке я использовал смесь текста и символов форматирования.
Также следует отметить, что хотя я живу на восточном побережье США, где обычно смещение часового пояса составляет -5, результат на рисунке выше показывает смещение как -4.Это потому, что сейчас летнее время. Но было бы неплохо иметь возможность проверить это? На самом деле мы можем. Вот как это делается:
$ A = Get-Date
$ A.IsDaylightSavingTime ()
Как вы можете видеть на изображении ниже, PowerShell показывает значение True, что указывает на то, что сейчас действительно летнее время.
А как насчет дня в году?
Мы также можем использовать PowerShell, чтобы сообщить нам, какой сегодня день в году. Вот как это работает:
$ A = Дата получения
$ A.DayOfYear
Если вы действительно хотите сделать что-то интересным, вы можете указать дату, чтобы узнать, на какой день года она выпадает. Указанная вами дата может быть прошлой или будущей. Вот пример:
Get-Date -Год 2018 -Месяц 8-День 22) .DayOfYear
Вы можете увидеть несколько примеров на изображении ниже.
Проведение сравнения дат
Как я сказал ранее, для сравнения дат можно использовать PowerShell.Хотя вы можете использовать параметр -Format, чтобы поместить дату в определенный формат перед ее сравнением с другим значением, это не всегда необходимо. Например, сравнение дат записи файлов не требует использования какого-либо специального форматирования.
Предположим на мгновение, что вы хотите сравнить время последней записи для определенного файла с датой и временем по вашему выбору, чтобы увидеть, был ли файл записан позже указанной даты.
В такой ситуации первое, что нам нужно сделать, это сопоставить нашу целевую дату с переменной.Для демонстрации я сопоставлю 2 января 2017 года (что является случайной датой) с переменной A $. Затем я сопоставлю конкретный файл с переменной, которую назову X $. После этого можно будет провести сравнение между ними. Итак, вот команды, которые я собираюсь использовать:
$ A = (Get-Date -Year 2017 -Month 01-Day 02)
$ A
$ X = Get-ChildItem Readme.txt
$ X.LastWriteTime
$ X.LastWriteTime -GT $ A
Первая строка кода отображает переменную $ A на 2 января 2017 года.Следующая строка просто проверяет, что переменная содержит желаемую дату. Третья строка кода отображает переменную $ X в файл с именем ReadMe.txt. В четвертой строке отображается время последней записи файла. Последняя строка кода сравнивает две даты. Он покажет True, если файл был написан позже, чем 2 января 2017 года. В противном случае будет показано значение False. Снимок экрана ниже показывает это в действии. Вы также заметите, что я добавил еще одну строку, чтобы проверить, не было ли время последней записи файла старше (-LT) 2 января 2017 г.Выполнение двух отдельных сравнений позволяет увидеть, что сравнение действительно делает то, что должно делать.
Даты в PowerShell: дополнительные сведения
PowerShell на самом деле позволяет вам делать гораздо больше в отношении форматирования и сравнения дат, чем то, о чем я говорил в этой статье. Если вы хотите узнать больше об использовании дат в PowerShell, лучше всего начать с документации Microsoft по командлету Get-Date.
Просмотры сообщений:
77 505
Другие статьи об основах PowerShell
сообщить об этом объявлении
Соответствие Datetime и RFC3339 в PowerShell - подробное описание
Опубликовано в
: Microsoft Стина Пербо Переводчик с Google & xrarr;
3 года назад
Мой коллега спросил, есть ли способ вывести дату и время, совместимые с RFC (https: // www.ietf.org/rfc/rfc3339.txt) в PowerShell без ручного форматирования в T и Z в середине и конце в соответствии со стандартом ISO и подразумевает UTC + -00: 00
Прежде чем я начну с того, как, я хотел бы поговорить о том, почему.
Если вы когда-либо занимались кодированием, вы наверняка сталкивались с проблемами с datettime и, возможно, с ошибками и инцидентами, связанными с форматом времени строки datetime.
Например, если я живу в США, время обычно записывается в формате «месяц-день-год», который в течение первых 12 дней каждого месяца неотличим от европейского формата «день-месяц-год».
Это также встречается в коде, например, в PowerShell мой язык - шведский, а командлет Get-Date возвращает «den 1 augusti 2018 16:35:24», который легко и легко читается человеком.
Однако, если я конвертирую его в строку, он становится в формате США, хотя в моих настройках культуры в PowerShell установлен шведский язык.
На мой взгляд, такое поведение неверно, поскольку я ожидаю, что мне будет предоставлен стандартный универсальный формат ISO или, по крайней мере, формат, соответствующий культуре. Вместо этого мне предоставляется формат США.
PS C: \> "$ (Get-Date)"
01.08.2018 16:35:27
PS C: \> Get-Культура
Имя LCID DisplayName
---- ---- -----------
1053 sv-SE Шведский (Швеция)
С учетом вышесказанного, когда мы пишем в журналы, при разработке средств автоматизации и инструментов для глобальных клиентов очень нужен стандартный формат.
Каким образом
После недолгого времени в Google кажется, что никто не сделал этого должным образом в PowerShell. Я также узнал, что XML совместим с RFC.
Как я это сделал?
[Xml.XmlConvert] :: ToString ((дата получения), [Xml.XmlDateTimeSerializationMode] :: Utc)
Возврат:
2018-08-01T14: 23: 46.851301Z
Отлично! Теперь давайте превратим это в настоящий код.
Пример 1: Запись текущей даты в файл журнала
$ Now = [Xml.XmlConvert] :: ToString ((дата получения), [Xml.XmlDateTimeSerializationMode] :: Utc)
"$ Now || Перезапуск сервера" | Out-File $ logfile -Append
Вывод становится строкой, соответствующей RFC, и сохраняется в переменной $ now для использования в операции журнала out-file.
Пример 2: Написание крайнего срока работы datettime
$ Крайний срок = (Дата получения) .AddHours (20)
$ RFCDeadline = [Xml.XmlConvert] :: ToString ($ Deadline, [Xml.XmlDateTimeSerializationMode] :: Utc)
$ Now = [Xml.XmlConvert] :: ToString ((дата получения), [Xml.XmlDateTimeSerializationMode] :: Utc)
«$ Now || Сервер будет перезапущен в $ RFCDeadline» | Out-File $ logfile -Append
Здесь мы создаем объект datettime, добавляем 20 часов, а затем конвертируем его в строку datettime, совместимую с RFC, и сохраняем ее в переменной $ RFCDeadline.
Надеюсь, это кому-то поможет!
Теги
: datetime, PowerShell, XML
Преобразование в местное время с помощью PowerShell • Одинокий администратор
Как некоторые из вас знают, я провожу ежемесячный онлайн-чат в Twitter в первую пятницу каждого месяца, используя тег #PSTweetChat (хотя чат в январе 2021 года будет 8 января). Мы собираемся вместе и обсуждаем все, что касается PowerShell, в 1 : 00 вечера по восточному времени.Задача для остального мира - убедиться, что они знают, сколько времени для них. Я тоже был на другом конце. Мне нужно посетить мероприятие, которое проводится в 10:00 по центральноевропейскому стандартному времени. Когда это для меня? Я провожу свой день в PowerShell, поэтому должен быть простой способ ответить на этот вопрос.
DateTime Shenanigans
И, конечно, есть. Класс [DateTime] имеет метод ToLocalTime (), который преобразует время UTC в ваше местное время. Чтобы преобразовать событие 10:00 AM CET в мое местное время, мне нужно преобразовать в это время .по всемирному координированному времени, а затем по местному времени.
Первая часть - и да, это можно сделать двумя способами - создать объект даты и времени для 10:00 AM CET. Я не могу просто запустить Get-Date, потому что любой результат будет относиться к моему часовому поясу . Что ж, вообще-то могу.
$ datetime = Get-Date "30.12.2020 10:00 AM"
Мне нужно настроить это значение в соответствии с часовым поясом CET. Для этого мне нужно знать часовой пояс. Без проблем.
$ tzone = Get-TimeZone -Id "Центральноевропейское стандартное время"
Я предполагаю, что вы посмотрите справку и примеры для этой команды.Этот результат включает свойство, которое отражает временной интервал для смещения UTC. Другими словами, насколько это далеко от UTC. Для CET это 1:00:00. Я могу использовать метод AddHours () для настройки значения datetime.
$ remoteTime = $ DateTime.AddHours (- ($ tzone.BaseUtcOffset.totalhours))
Это значение UTC, которое я теперь могу преобразовать в мое местное время.
$ remoteTime.ToLocalTime ()
Я живу по восточному времени, поэтому смещение по всемирному координированному времени составляет -5 часов.CET - это еще один час сверх этого, всего 7 часов, так что 10:00 AM CET для меня фактически 4:00 AM. Думаю, я могу пропустить эту встречу.
ConvertTo-LocalTime
Теперь, когда у меня выработана основная механика, я завершу ее функцией PowerShell.
Функция ConvertTo-LocalTime {
<#
.Synopsis
Преобразование удаленного времени в местное
.Описание
Вы можете использовать эту команду для преобразования даты и времени из другого часового пояса в ваше местное время.Вы должны иметь возможность вводить удаленное время, используя местный формат времени и даты.
.Параметр Время
Укажите дату и время из другого часового пояса.
.Параметр Часовой пояс
Выберите соответствующий часовой пояс.
. Пример .
PS C: \> ConvertTo-LocalTime "2/2/2021 2:00 PM" -TimeZone 'Центральноевропейское стандартное время'
Вторник, 2 февраля 2021 г. 8:00:00
Преобразование времени Центральной Европы в местное время, которое в данном примере является восточноевропейским стандартным временем.
. Пример .
PS C: \> ConvertTo-LocalTime "02.07.2021, 14:00" -TimeZone "Стандартное время Центральной Европы" -Verbose
VERBOSE: перевод пятницы, 2 июля 2021 г., 14:00 [стандартное время Центральной Европы, 01:00:00 UTC] в местное время.
2 июля 2021 г., 9:00:00
При расчете следует учитывать переход на летнее время. Подробный вывод указывает часовой пояс и его смещение по всемирному координированному времени.
.Примечания
Подробнее о PowerShell: http: // jdhitsolutions.com / blog / essential-powershell-resources /
. Входов
Нет
. Ссылка
Get-Date
. Ссылка
Get-TimeZone
#>
[cmdletbinding ()]
[псевдоним ("ctlt")]
[Тип вывода ([System.Datetime])]
Param (
[Параметр ( Позиция = 0, Обязательно , HelpMessage = "Укажите дату и время из другого часового пояса.")]
[ValidateNotNullorEmpty ()]
[псевдоним ("dt")]
[строка] $ Время,
[Параметр ( Позиция = 1, Обязательно , HelpMessage = "Выберите соответствующий часовой пояс.")]
[псевдоним ("tz")]
[строка] $ TimeZone
)
# анализ даты из строки с учетом культурных различий
$ ParsedDateTime = Get-Date $ время
$ tzone = Get-TimeZone -Id $ Timezone
$ datetime = "{0: f}" -f $ parsedDateTime
Write-Verbose «Преобразование $ datetime [$ ($ tzone.id) $ ($ tzone.BaseUTCOffSet) UTC] в местное время».
$ ParsedDateTime.AddHours (- ($ tzone.BaseUtcOffset.totalhours)). ToLocalTime ()
}
Функция требует указать дату и время и связанный с ним часовой пояс.Если тестирование, которое я смог выполнить, вы сможете указать дату, используя местный формат даты и времени. Вот почему параметр Time представляет собой строку, и я вызываю Get-Date. Мне нужно быть уверенным, что проанализированное значение соответствует вашей культуре. Остальная часть кода - это просто более компактная версия того, что я только что продемонстрировал.
Завершитель часового пояса
Чтобы сделать это еще проще в использовании, я хотел предварительно указать возможные значения часового пояса. Другими словами, добавьте автозаполнение.В том же файле, что и функция, у меня есть этот фрагмент кода PowerShell для настройки средства завершения аргумента.
Register-ArgumentCompleter -CommandName ConvertTo-LocalTime -ParameterName TimeZone -ScriptBlock {
param ($ commandName, $ parameterName, $ wordToComplete, $ commandAst, $ fakeBoundParameter)
# Код PowerShell для заполнения $ wordtoComplete
(Get-TimeZone -ListAvailable | Sort-Object -Property ID) .where ({$ _. Id -match "$ wordToComplete"}) |
ForEach-Object {
# текст завершения, текст элемента списка, тип результата, всплывающая подсказка
[Система.Management.Automation.CompletionResult] :: new ("'$ ($ _. Id)'", "'$ ($ _. Id)'", 'ParameterValue', $ _. BaseUtcOffset)
}
}
Код в блоке сценария выполняется и предоставляет значения завершения. Вам нужно запустить команду, которая будет генерировать результаты, и каждый результат будет добавлен как объект CompletionResult. Я показываю значения параметров для метода New () в качестве комментария.
У вас также есть возможность использовать параметр $ WordToComplete как тип подстановочного знака.В моем коде аргумент complete получает идентификаторы часовых поясов, где имя соответствует тому, что я набираю. Это означает, что я могу начать набирать:
ConvertTo-LocalTime -Time "30/12/20 10:00 AM" -TimeZone europe
И нажмите Ctrl + Пробел, чтобы вызвать PSReadline, который показывает мне возможные значения.
01:00:00, которое вы видите, - это значение всплывающей подсказки, которое является BaseUTCOffset. В PowerShell ISE это выглядит немного лучше.
Кстати, если набрать:
ConvertTo-LocalTime -Time "30/12/20 10:00 AM" -TimeZone
А затем нажмите Ctrl + Пробел, PowerShell предложит вам отобразить все 140 возможных значений.Я позволю вам попробовать это на себе.
Теперь у меня есть удобный инструмент PowerShell, который с первого взгляда подскажет, нужно ли мне приходить рано или поздно ложиться.
Надеюсь, вы попробуете этот код и дадите мне знать, что вы думаете. Мне особенно интересно услышать, как это работает для тех, кто не из Северной Америки. Из моего ограниченного тестирования я думаю, что вы можете ввести дату и время, используя вашу местную культуру, и все должно работать, как ожидалось. Но хотелось бы подтверждения.
Учитесь и наслаждайтесь.
Нравится:
Нравится Загрузка ...
Связанные Формат даты PowerShell - блог Стефаноса Константину
В этом руководстве мы рассмотрим формат даты PowerShell. Дата и время используются в наших скриптах много раз. Вы можете получить текущую дату системы с помощью командлета Get-Date
. Формат по умолчанию определяется системной локалью, в которой вы запускаете команду.Мы рассмотрим некоторое форматирование значения даты и увидим различия, используя доступные параметры для этого командлета. Я не буду подробно останавливаться на всех параметрах командлета Get-Date
, так как это руководство сосредоточено только на форматировании отображения даты.
Параметры форматирования:
Ниже вы можете увидеть формат по умолчанию для моей системы, когда я использую Get-Date.
Если мы будем использовать Format-List
, мы увидим всю включенную информацию. Командлет Get-Date
возвращает объект DateTime .Ниже представлен вывод той же команды, показывающий всю информацию.
Get-Date | Список форматов
Вывод:
DisplayHint Сначала мы будем использовать параметр -DisplayHint
. Используя этот параметр, мы определяем, какие значения информации мы хотим отображать. Объект, возвращаемый командлетом, по-прежнему является объектом DateTime. Этот параметр может принимать три значения.
- Дата - показывает только дату.
- Время - показывает только время.
- DateandTime - показывает дату и время.Это значение по умолчанию.
Формат Использование параметра -Format позволяет отображать дату и время в указанном вами формате. Параметр -Format принимает все значения, разрешенные в Microsoft .Net Framework, которые включены в класс DateTimeFormatInfo. Есть несколько вариантов, которые вы можете использовать для форматирования даты в соответствии с вашими потребностями. Обратите внимание, что результат, полученный при использовании параметра -Format
, больше не является объектом DateTime .Вывод команды - String . Ниже представлена информация, предоставленная Microsoft для доступных спецификаторов стандартного формата и их описания.
Строки стандартного формата Список опций
- Дата:
-
d
: Краткий образец даты -
D
: Длинный образец даты -
f
: Полный образец даты / времени (кратковременный ) -
F
: Полный шаблон даты / времени (долгое время) -
g
: Общий шаблон даты / времени (короткое время) -
G
: Общий шаблон даты / времени (долгое время) -
M
или м
: шаблон дня месяца -
o
: шаблон даты / времени туда и обратно -
R
или r
: шаблон RFC1123 -
с
: сортируемый шаблон даты / времени; соответствует ISO 8601 -
u
: Универсальный сортируемый шаблон даты / времени -
U
: Универсальный сортируемый шаблон даты / времени -
Y
или y
: Год месяц шаблон
- Время:
-
t
: Кратковременный образец -
T
: Долгосрочный образец
Давайте посмотрим на вывод следующих примеров формата:
Get-Date -Format D
Get-Date -Format f
Get-Date -Format F
Get-Date -Format g
Get-Date -Format G
Get-Date -Format m
Get-Date -Format y
Вывод приведенных выше команд:
Строки настраиваемого формата Информация ниже показывает значения настраиваемого форматирования, которые мы можем использовать с параметром -Format
.Приведенная ниже информация предоставлена Microsoft.
- Период / Эра:
-
g
или gg
(плюс любое количество дополнительных спецификаторов «g»): представляет период или эру (например, н.э.). Этот спецификатор игнорируется, если форматируемая дата не имеет связанной строки периода или эры.
- Дата:
-
K
: представляет различные значения свойства DateTime.Kind, то есть Local, Utc или Unspecified. Этот спецификатор возвращает значение kind в тексте и сохраняет часовой пояс.
- Год:
-
y
: Представляет год как максимум двузначным числом. Если год состоит из более чем двух цифр, в результате появляются только две младшие цифры. Если год состоит менее чем из двух цифр, число форматируется без нуля в начале. -
гг
: представляет год в виде двузначного числа. Если год состоит из более чем двух цифр, в результате появляются только две младшие цифры. Если год состоит менее чем из двух цифр, число дополняется ведущими нулями, чтобы получить две цифры. -
ггг
: представляет год в виде трехзначного числа. Если год состоит из более чем трех цифр, в результате появляются только три младшие цифры. Если год состоит менее чем из трех цифр, число дополняется ведущими нулями для получения трех цифр. Обратите внимание, что для тайского буддийского календаря, в котором годы могут быть пятизначными, этот описатель формата отображает все пять цифр. -
гггг
: представляет год в виде четырехзначного числа. Если год состоит из более чем четырех цифр, в результате появляются только четыре младшие цифры.Если год состоит менее чем из четырех цифр, число дополняется ведущими нулями, чтобы получить четыре цифры. Обратите внимание, что в тайском буддийском календаре, в котором годы могут быть пятизначными, этот спецификатор формата отображает все пять цифр. -
yyyyy
(плюс любое количество дополнительных спецификаторов «y»): представляет год в виде пятизначного числа. Если год состоит более чем из пяти цифр, в результате появляются только пять младших цифр. Если год состоит менее чем из пяти цифр, число дополняется ведущими нулями, чтобы получить пять цифр.Если есть дополнительные спецификаторы «y», число дополняется таким количеством ведущих нулей, которое необходимо для достижения количества спецификаторов «y».
- День:
-
d
: Представляет день месяца в виде числа от 1 до 31. Однозначный день форматируется без нуля в начале. -
дд
: представляет день месяца в виде числа от 01 до 31. Однозначный день форматируется с начальным нулем. -
ddd
: представляет сокращенное название дня недели, как определено в текущей системе.Свойство Globalization.DateTimeFormatInfo.AbbreviatedDayNames. -
dddd
(плюс любое количество дополнительных спецификаторов «d»): представляет полное название дня недели, как определено в текущем свойстве System.Globalization.DateTimeFormatInfo.DayNames.
- Часовой пояс:
-
z
: Представляет сдвиг часового пояса со знаком для вашей системы относительно среднего времени по Гринвичу (GMT), измеренный в часах. Смещение всегда отображается со знаком.Знак «плюс» (+) указывает на часы, опережающие GMT, а знак «минус» (-) указывает на часы, отставшие от GMT. Смещение находится в диапазоне от –12 до +13. Однозначное смещение форматируется без нуля в начале. На смещение влияет летнее время. -
zz
: представляет смещение часового пояса системы со знаком относительно среднего времени по Гринвичу (GMT) в часах. Смещение всегда отображается со знаком. Знак «плюс» (+) указывает на часы, опережающие GMT, а знак «минус» (-) указывает на часы, отставшие от GMT.Смещение находится в диапазоне от –12 до +13. Однозначное смещение форматируется с начальным нулем. На смещение влияет летнее время. -
zzz
, zzz
(плюс любое количество дополнительных спецификаторов «z»): представляет смещение часового пояса со знаком для вашей системы от среднего времени по Гринвичу (GMT), измеренное в часах и минутах. Смещение всегда отображается со знаком. Знак «плюс» (+) указывает на часы, опережающие GMT, а знак «минус» (-) указывает на часы, отставшие от GMT.Смещение находится в диапазоне от –12 до +13. Однозначное смещение форматируется с начальным нулем. На смещение влияет летнее время.
- Время:
-
t
: представляет первый символ A.M./P.M. указатель, определенный в текущем свойстве System.Globalization.DateTimeFormatInfo.AMDesignator или System.Globalization.DateTimeFormatInfo.PMDesignator. -
tt
, tt
(плюс любое количество дополнительных спецификаторов «t»): представляет A.М. / П.М. обозначение, как определено в текущем свойстве System.Globalization.DateTimeFormatInfo.AMDesignator или System.Globalization.DateTimeFormatInfo.PMDesignator.
- Часы:
-
h
: Представляет час в виде числа от 1 до 12, то есть час в 12-часовом формате, который отсчитывает все часы с полуночи или полудня. Следовательно, конкретный час после полуночи неотличим от того же часа после полудня. Час не округляется, а однозначный час форматируется без нуля в начале. -
hh
, hh
(плюс любое количество дополнительных спецификаторов «h»): представляет час в виде числа от 01 до 12, то есть час в 12-часовом формате, который считает все часы. с полуночи или полудня. Следовательно, конкретный час после полуночи неотличим от того же часа после полудня. Час не округляется, а однозначный час форматируется с нулем в начале. -
H
: Представляет час как число от 0 до 23, то есть час, представленный в 24-часовом формате с отсчетом от нуля, который отсчитывает часы с полуночи.Однозначный час форматируется без нуля в начале. -
HH
, HH
(плюс любое количество дополнительных спецификаторов «H»): представляет час как число от 00 до 23, то есть час, представленный в 24-часовом формате с отсчетом от нуля. часы с полуночи. Однозначный час форматируется с нуля в начале.
- Минуты:
-
м
: Представляет минуты в виде числа от 0 до 59. Минуты представляют собой целые минуты, прошедшие с последнего часа.Минуты с одной цифрой форматируются без нуля в начале. -
мм
, мм
(плюс любое количество дополнительных спецификаторов «m»): представляет минуты в виде числа от 00 до 59. Минуты представляют собой целые минуты, прошедшие с последнего часа. Минуты, состоящие из одной цифры, форматируются с нуля в начале. -
M
: Представляет месяц в виде числа от 1 до 12. Однозначный месяц форматируется без нуля в начале. -
MM
: обозначает месяц в виде числа от 01 до 12.Месяц, состоящий из одной цифры, форматируется с нуля в начале. -
MMM
: представляет сокращенное название месяца, как определено в текущем свойстве System.Globalization.DateTimeFormatInfo.AbbreviatedMonthNames. -
MMMM
: представляет полное название месяца, как определено в текущем свойстве System.Globalization.DateTimeFormatInfo.MonthNames.
- Секунды:
-
с
: Представляет секунды в виде числа от 0 до 59.Вторая представляет собой целые секунды, прошедшие с последней минуты. Секунда, состоящая из одной цифры, форматируется без нуля в начале. -
ss
, ss
(плюс любое количество дополнительных спецификаторов «s»): представляет секунды в виде числа от 00 до 59. Секунда представляет собой целые секунды, прошедшие с последней минуты. Секунда, состоящая из одной цифры, форматируется с нуля в начале. -
f
: представляет самую значительную цифру доли секунды. Обратите внимание, что если описатель формата «f» используется отдельно, без других описателей формата, он интерпретируется как описатель стандартного формата DateTime «f» (полный шаблон даты / времени). -
ff
: представляет две старшие цифры доли секунды. -
fff
: представляет три старших разряда доли секунды. -
ffff
: представляет четыре старших разряда доли секунды. -
fffff
: представляет пять наиболее значимых цифр доли секунды. -
ffffff
: представляет шесть старших разрядов доли секунды. -
fffffff
: представляет семь наиболее значимых цифр доли секунды. -
F
: представляет наиболее значительную цифру доли секунды. Если цифра равна нулю, ничего не отображается. -
FF
: представляет две старшие цифры доли секунды. Однако конечные нули или две нулевые цифры не отображаются. -
FFF
: представляет три старших разряда доли секунды.Однако конечные нули или три нулевых цифры не отображаются. -
FFFF
: представляет четыре старших разряда доли секунды. Однако конечные нули или четыре нулевых цифры не отображаются. -
FFFFF
: представляет пять наиболее значимых цифр доли секунды. Однако конечные нули или пять нулевых цифр не отображаются. -
FFFFFF
: представляет шесть старших разрядов доли секунды.Однако конечные нули или шесть нулевых цифр не отображаются. -
FFFFFFF
: представляет семь наиболее значимых цифр доли секунды. Однако конечные нули или семь нулевых цифр не отображаются.
- Разделители:
-
:
: Разделитель времени, определенный в текущем свойстве System.Globalization.DateTimeFormatInfo.TimeSeparator, которое используется для различения часов, минут и секунд. -
/
: разделитель даты, определенный в текущей системе.Свойство Globalization.DateTimeFormatInfo.DateSeparator, которое используется для различения лет, месяцев и дней. -
"
: строка в кавычках (кавычки). Отображает буквальное значение любой строки между двумя кавычками («). Перед каждой кавычкой ставится escape-символ (\). -
'
: Строка в кавычках (апостроф Отображает буквальное значение любой строки между двумя символами апострофа ('). -
% c
: представляет результат, связанный с описателем настраиваемого формата «c», когда строка настраиваемого формата DateTime состоит только из этого описателя настраиваемого формата. .То есть использовать «d», «f», «F», «h», «m», «s», «t», «y», «z», «H» или «M» спецификатор настраиваемого формата, укажите «% d», «% f», «% F», «% h», «% m», «% s», «% t», «% y», «% z» »,«% H »или«% M ». -
\ c
: escape-символ. Отображает символ «c» как литерал, если этому символу предшествует escape-символ (\). Чтобы вставить сам символ обратной косой черты в строку результата, используйте два управляющих символа («\\»).
Рассмотрим несколько примеров с использованием настраиваемых спецификаторов.Мы будем использовать следующее:
Get-Date -Format dd-MMM-yyyy
Get-Date -Format dd-MMMM-yyyy
Get-Date -Format MM-yy
Get-Date -Format MM-yyyy
Get-Date -Format MMMM-yy
Get-Date -Format MMMM-yyyy
Get-Date -Format 'дд-ММММ-гггг чч: мм: сс тт'
Get-Date -Format 'dd-MMMM-yyyy HH: mm: ss'
Вывод вышеуказанных команд:
UFormat Эти параметры позволяют указать формат, который вы хотите отображать в формате Unix. Формат команды, которой вы должны следовать, - Get-Date -UFormat% \
.Результатом командлета при использовании -UFormat
также является String . Ниже приведен список значений, которые вы можете ввести для этих параметров, включая описание и примеры, предоставленные Microsoft.
Список опций:
(по умолчанию): (пятница, 16 июня 2006 г., 10:31:27)
-
c
: Дата и время - сокращенные (пятница, 16 июня, 10:31:27 2006) - Дата:
-
D
: Дата в формате мм / дд / гг (14.06.06) -
x
: Дата в стандартном формате для локали (09.12.07 для английского языка, США)
- Год:
-
C
: Век (20 для 2006 г.) -
Y
: Год в 4-значном формате (2006) -
y
: Год в 2-значном формате (06) -
G
: То же, что и Y -
g
: То же, что и y
- Месяц:
-
b
: Сокращенное название месяца (январь) -
B
: Название месяца - полное (январь) -
h
: То же, что и b -
m
: Номер месяца (06)
- Неделя:
-
W
: Неделя года (00-52) -
V
: Неделя года (01-53) -
U
: То же, что и W
- День:
-
a
: День недели - сокращенное название (Пн) -
A
: День недели - полное имя (понедельник) -
u
: День недели - номер (понедельник = 1) -
d
: День месяца - 2 цифры (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' -
л
: то же, что и 'I' (верхний регистр I = нижний регистр L)
- Минуты и секунды:
-
M
: минуты (35) -
S
: секунды (05) -
с
: секунды, прошедшие с 00:00:00 1 января 1970 г. (1150451174.95705)
- Специальные символы:
-
n
: символ новой строки (\ n) -
t
: символ табуляции (\ t)
Ниже я буду использовать те же примеры, которые я использовал с -Format
, но измените его с помощью параметра -UFormat
:
Get-Date -UFormat% d-% m-% Y
Get-Date -UFormat% d-% b-% Y
Get-Date -UFormat% d-% B-% Y
Get-Date -UFormat% m-% y
Get-Date -UFormat% m-% Y
Get-Date -UFormat% B-% y
Get-Date -UFormat% B-% Y
Get-Date -UFormat '% d-% B-% Y% r'
Get-Date -UFormat '% d-% B-% Y% I:% M:% S% p'
Get-Date -UFormat '% d-% B-% Y% T'
Get-Date -UFormat '% d-% B-% Y% H:% M:% S'
Вывод приведенных выше команд:
Резюме:
Есть много опций, которые вы можете использовать для форматирования отображения даты и времени.