Get date

Windows PowerShell Get-Date Format

Manipulating dates is always tricky.  However, PowerShell’s Get-Date cmdlet does a wonderful job of interpreting the different international formats for day / month / year.  As a result, whatever your computer’s country locale, it will be easy to calculate how many days there are to Christmas.

Topics for Windows PowerShell Get-Date and DateTime

  • Introduction to the Get-Date Cmdlet
  • How Many Days Until Christmas? (or Thanksgiving)
  • Example 1 – Calculate Days Until Christmas Using Variables
  • Example 2 – Production Version of ‘How Many Days to Christmas’
  • Bonus Technique – DateTime and ParseExact

 ♣

Introduction to the Get-Date Cmdlet

On this page I am making a change to my usual running order.  I want to start by tackling the challenge presented by a real-life task.  After showing examples of Get-Date in action I will encourage you to research more methods and properties for this PowerShell cmdlet.  The result will be that you have the skills to undertake other DateTime projects.

How Many Days to Christmas? (or Thanksgiving)

Our challenge is simple enough, to knock-up a simple script that will tell us how many days there are until Christmas, Thanksgiving, or any other date you care to place in a text string.

Here in the UK, our operating systems show dates in the format: dd mmmm yyyy.  Whereas in the United States your locale is displayed as mmmm dd yyyy.  Consequently, I was amazed that PowerShell could convert both "25 December 2014" and "November 28 2014" into date values that it could understand and perform calculations.

Example 1 – Calculate Days Until Christmas Using Lots of Variables

In example one I have used several variables that are not strictly necessary, I just wanted to show my thought process in creating this very simple PowerShell script.

Note 1: You may wish to examine the values for $DecDate and $NovDate, then change the sequence of day month to suit your locale.

Note 2: It’s interesting to see how PowerShell leverages .Net Framework, for example, it employs System.DateTime to convert a text string to a date format.

Note 3: I keep marvelling how PowerShell can understand both formats: dd mmmm yyyy, and mmmm dd yyyy.

Guy Recommends:  A Free Trial of the Network Performance Monitor (NPM)Get date v11.5

SolarWinds’ Network Performance Monitor will help you discover what’s happening on your network.  This utility will also guide you through troubleshooting; the dashboard will indicate whether the root cause is a broken link, faulty equipment or resource overload.

What I like best is the way NPM suggests solutions to network problems.  Its also has the ability to monitor the health of individual VMware virtual machines.  If you are interested in troubleshooting, and creating network maps, then I recommend that you try NPM now.

Download a free trial of Solarwinds’ Network Performance Monitor

Example 2 – Production Version of ‘How Many Days to Christmas’

Note 4: This is just one long command.  Observe how the backtick (`) enables the command to overspill onto the second line.  Alternatively, break the line at the open bracket symbol thus:

– (
Get-Date).DayOfYear) + " days until " + "24 December 2014"

Note 5: This command needed an extra set of round brackets to surround [system.datetime]"25 December 2014"

Note 6: It’s interesting to see how PowerShell interprets a mixture of "text strings" and date calculations.  As with types of bracket, you need the correct type of "double" speech marks here.

Further Research on PowerShell’s Get-Date

I’m hoping that the simple example above will give you ideas for date scripts, which will be useful in your PowerShell projects.  If so, then it’s well worth examining Get-Date’s properties, and in particular its methods.

a) Get-Date Methods and Properties

Note 7: Normally it’s a cmdlet’s properties that I am most interested in, but with Get-Date it’s the methods that intrigue me, for example .AddDays() and .IsDaylightSavingTime().

b) AddDays Method

The purpose of this script is to list all the System Error messages from the last 8 days. Incidentally, it’s amazing how often we use this method with a negative number to go back in time.

Note 8: See more on this @{.. technique of PowerShell ‘Splatting’

c) Another Job for .AddDays
Scenario: You want to list eventlog messages younger than 30 days.

Get dateGuy Recommends: SolarWinds Engineer’s Toolset v10

This Engineer’s Toolset v10 provides a comprehensive console of 50 utilities for troubleshooting computer problems.  Guy says it helps me monitor what’s occurring on the network, and each tool teaches me more about how the underlying system operates.

There are so many good gadgets; it’s like having free rein of a sweetshop.  Thankfully the utilities are displayed logically: monitoring, network discovery, diagnostic, and Cisco tools.  Try the SolarWinds Engineer’s Toolset now!

Download your fully functional trial copy of the Engineer’s Toolset v10

Get-Date Parameters

Thanks to PowerShell’s help, I learned about the format -Uformat.

Formatting Get-Date Challenge: 
UK readers may appreciate employing this -Uformat parameter to rearrange days and months:

Bonus Technique – DateTime and ParseExact

Once again, here is PowerShell working with the .Net Framework class DateTime.  ParseExact is a neat method which can convert a text string into its DateTime equivalent.

Get-Date CSV Format

Here is an example which employs another PowerShell cmdlet called ConvertTo-Csv to control the date format.

Note 9: You could change the separator from a comma to a semi-colon by appending this parameter: -Delimiter ";"

See more on ConvertTo-Csv »

Summary of PowerShell Get-Time and DateTime

Scripting dates is always tricky.  In these examples we can see how PowerShell leverages .Net Framework to convert strings into PowerShell’s DateTime values, which in turn, can be use for calculations.

 


www.computerperformance.co.uk

У большинства пользователей, создающих даже самые простые сценарии 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

Displays the date and time in the Microsoft .NET Framework format indicated by the format specifier. Enter a format specifier. For a list of available format specifiers, see DateTimeFormatInfo Class.

When you use the -Format parameter, PowerShell gets only the properties of the DateTime object that it needs to display the date in the format that you specify. As a result, some of the properties and methods of DateTime objects might not be available.

Starting in Windows PowerShell 5.0, you can use the following additional formats as values for the -Format parameter.

  • FileDate. A file or path-friendly representation of the current date in local time. It is in the form of yyyyMMdd (case-sensitive, using a 4-digit year, 2-digit month, and 2-digit day). An example of results when you use this format is 20150302.

  • FileDateUniversal. A file or path-friendly representation of the current date in universal time (UTC). It is in the form of yyyyMMddZ (case-sensitive, using a 4-digit year, 2-digit month, 2-digit day, and the letter "Z" as the UTC indicator). An example of results when you use this format is 20150302Z.

  • FileDateTime. A file or path-friendly representation of the current date and time in local time, in 24-hour format. It is in the form of yyyyMMddTHHmmssffff (case-sensitive, using a 4-digit year, 2-digit month, 2-digit day, the letter "T" as a time separator, 2-digit hour, 2-digit minute, 2-digit second, and 4-digit millisecond). An example of results when you use this format is 20150302T1240514987.

  • FileDateTimeUniversal. A file or path-friendly representation of the current date and time in universal time (UTC), in 24-hour format. It is in the form of yyyyMMddTHHmmssffffZ (case-sensitive, using a 4-digit year, 2-digit month, 2-digit day, the letter "T" as a time separator, 2-digit hour, 2-digit minute, 2-digit second, 4-digit millisecond, and the letter "Z" as the UTC indicator). An example of results when you use this format is 20150302T0840539947Z.

Type: String
Position: Named
Default value: None
Accept pipeline input: False
Accept wildcard characters: False

docs.microsoft.com

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:USERPROFILEDesktop | ? {$_.LastWriteTime -ge (Get-Date).AddDays(-1)}    Каталог: C:UsersUserDesktop   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# 

Во многих командлетах на вход принимается именно дата, причем дата может быть указана и в виде текста (правда лучше так не делать).
Убедимся, напишем простую функцию «When», принимающую на вход один аргумент (именованный параметр «Date»):

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] с примерами и особо без объяснений 🙂

sawfriendship.wordpress.com

You May Also Like

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.