{"id":17571,"date":"2010-08-02T00:01:00","date_gmt":"2010-08-02T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2010\/08\/02\/using-windows-powershell-to-work-with-dates\/"},"modified":"2010-08-02T00:01:00","modified_gmt":"2010-08-02T00:01:00","slug":"using-windows-powershell-to-work-with-dates","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/using-windows-powershell-to-work-with-dates\/","title":{"rendered":"Using Windows PowerShell to Work with Dates"},"content":{"rendered":"<p>&nbsp;\n<img decoding=\"async\" height=\"34\" width=\"34\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/q-for-powertip.jpg\" align=\"left\" alt=\"Hey, Scripting Guy! Question\" border=\"0\" title=\"Hey, Scripting Guy! Question\">\nHey, Scripting Guy! I need to be able to use <a href=\"http:\/\/technet.microsoft.com\/en-us\/scriptcenter\/powershell.aspx\">Windows PowerShell<\/a> to work with dates. Dates have always been a difficult thing to work with, and I just dread scripting anything that has to do with dates. It seemed that VBScript had a dozen functions that were used to work with dates and times. Is there something similar for Windows PowerShell?\n&#8212; GS\n&nbsp;\n<img decoding=\"async\" height=\"34\" width=\"34\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/a-for-powertip.jpg\" align=\"left\" alt=\"Hey, Scripting Guy! Answer\" border=\"0\" title=\"Hey, Scripting Guy! Answer\">\nHello GS,\nMicrosoft Scripting Guy Ed Wilson here. I have never had too much problems with dates. Basically, I just pop them in my mouth whole like candy. The best dates I ever had were in Egypt. Oh, wait a minute, you don&rsquo;t mean those kinds of dates. Sorry. In the old days, <a href=\"http:\/\/gallery.technet.microsoft.com\/ScriptCenter\/en-us\/site\/search?f%5B0%5D.Type=RootCategory&amp;f%5B0%5D.Value=databases&amp;f%5B0%5D.Text=Databases\">databases<\/a> used to have three fields for the date. One for day, one for month and one for year. You may have heard about the Y2K <a href=\"http:\/\/en.wikipedia.org\/wiki\/Computer_bug\">bug<\/a>? That was because the field for year was only big enough for the last two numbers of the year &hellip; and therefore the year 2000 would be represented as 00. This is a serious problem if you are dealing with medical records and the person is born in 5\/4\/00. You do not know whether to send the person to geriatrics or to pediatrics.\nWhen working on one of those old systems, you had to build up the date by reading three different fields. If I were going to do a similar thing in Windows PowerShell, it might look like this:\n<span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #2b91af\">$dd<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #0000ff\">=<\/span><span style=\"color: #808080\"> &#8220;05&#8221; <br \/><\/span><span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #2b91af\">$mm<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #0000ff\">=<\/span><span style=\"color: #808080\"> &#8220;09&#8221; <br \/><\/span><span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #2b91af\">$yy<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #0000ff\">=<\/span><span style=\"color: #808080\"> &#8220;10&#8221; <br \/><\/span><span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span><span style=\"color: #808080\"> &#8220;$dd\/$mm\/$yy&#8221; <br \/><\/span><span style=\"color: #800000\">05<\/span><span style=\"color: #000000\">\/<\/span><span style=\"color: #800000\">09<\/span><span style=\"color: #000000\">\/<\/span><span style=\"color: #800000\">10<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span>\nOne of the great things about Windows PowerShell is that it is object oriented. Everything in Windows PowerShell is an object, even the string I just built up&hellip;whoops, I spoiled the surprise. Let&rsquo;s pretend I did not spoil the surprise (I like spoiling my supper too by eating desert first, but that is a different story&mdash;although it could have something to do with dates). The following code is really ugly, but it works because of the &ldquo;object-ness&rdquo; of Windows PowerShell. To find out what kind of object you are working with, you can use the <b>GetType<\/b> method as shown here:\n<span style=\"color: #0000ff\">  <\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"color: #000000\"><span style=\"font-family: Lucida Sans Typewriter\">PS C:&gt; &#8220;$dd\/$mm\/$yy&#8221;.GetType()<\/p>\n<p>IsPublic IsSerial Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>BaseType<br \/>&#8212;&#8212;&#8211; &#8212;&#8212;&#8211; &#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8211;<br \/>True<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>True<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>String<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Object<\/p>\n<p>PS C:&gt;<\/p>\n<p><\/span><\/span><\/span><\/p>\n<p>  <\/span>\nI said the previous code was ugly, but that is only because it looks strange. In general, I would use a set of parentheses before calling a method like <b>GetType<\/b>:\n<span style=\"color: #0000ff\">  <\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"color: #000000\"><span style=\"font-family: Lucida Sans Typewriter\">PS C:&gt; (&#8220;$dd\/$mm\/$yy&#8221;).GetType()<\/p>\n<p>IsPublic IsSerial Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>BaseType<br \/>&#8212;&#8212;&#8211; &#8212;&#8212;&#8211; &#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>&#8212;&#8212;&#8211;<br \/>True<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>True<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>String<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Object<\/p>\n<p>PS C:&gt;<\/p>\n<p><\/span><\/span><\/span><\/p>\n<p>  <\/span>\nActually using the parentheses is a good idea, because at times you can get yourself into trouble. This is shown here, where I attempt to get the type of the number 1:\n<span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #800000\">1<\/span><span style=\"color: #000000\">.GetType()<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #000000\">Bad<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">numeric<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">constant:<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #800000\">1<\/span><span style=\"color: #000000\">..<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #000000\">At<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">line:<\/span><span style=\"color: #800000\">1<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">char:<\/span><span style=\"color: #800000\">3<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #000000\">+<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #800000\">1<\/span><span style=\"color: #000000\">.<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">&lt;&lt;&lt;&lt;<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">GetType()<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #000000\">+<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">CategoryInfo<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">:<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">ParserError:<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #800000\">1<\/span><span style=\"color: #000000\">.:String)<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">[],<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">ParentContainsErrorRecordException<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #000000\">+<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">FullyQualifiedErrorId<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">:<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">BadNumericConstant<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span>\nThe problem is not because the number is not an object and does not have a type. The problem is that Windows PowerShell is not sure what to do. The parentheses help in that regard. Just as in high school algebra, the parentheses tells Windows PowerShell to perform the operation inside before looking outside the parentheses. As shown here, the number 1 is in fact an object:\n<span style=\"color: #0000ff\">  <\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"color: #000000\"><span style=\"font-family: Lucida Sans Typewriter\">PS C:&gt; (1).GetType()<\/p>\n<p>IsPublic IsSerial Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>BaseType<br \/>&#8212;&#8212;&#8211; &#8212;&#8212;&#8211; &#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>&#8212;&#8212;&#8211;<br \/>True<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>True<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Int32<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.ValueType<\/p>\n<p>PS C:&gt;<\/p>\n<p><\/span><\/span><\/span><\/p>\n<p>  <\/span>\nWindows PowerShell treats the number 1 as an int32. It is actually smaller than that, and you can specifically cast it to an int16. This is shown here:\n<span style=\"color: #0000ff\">  <\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"color: #000000\"><span style=\"font-family: Lucida Sans Typewriter\">PS C:&gt; [int16]1 | gm<\/p>\n<p><span>&nbsp;&nbsp; <\/span>TypeName: System.Int16<\/p>\n<p>Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>MemberType Definition<br \/>&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br \/>CompareTo<span>&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>int CompareTo(System.Object value), int CompareTo(System.Int16 value)<br \/>Equals<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>bool Equals(System.Int16 obj), bool Equals(System.Object obj)<br \/>GetHashCode Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>int GetHashCode()<br \/>GetType<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>type GetType()<br \/>GetTypeCode Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.TypeCode GetTypeCode()<br \/>ToString<span>&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>string ToString(System.IFormatProvider provider), string ToString(string &#8230;<\/p>\n<p><\/span><\/span><\/span><\/p>\n<p>  <\/span>\nCasting? What is that? Windows PowerShell has a dynamic type system, and I can convert one data type to another data type on the fly. By default, Windows PowerShell treats all numbers as int32. As seen earlier, I can constrain the type, force the type, or cast the type (whatever jargon you wish to use) to make my int32 into an int16. Cool? Ok, perhaps it depends on your geek factor. Let&rsquo;s get back to the problem at hand: dates. We have just seen that we had a string when we put the numbers together. Remember this?\n<span style=\"color: #0000ff\">  <\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"color: #000000\"><span style=\"font-family: Lucida Sans Typewriter\">PS C:&gt; &#8220;$dd\/$mm\/$yy&#8221;<br \/>05\/09\/10<br \/>PS C:&gt; &#8220;$dd\/$mm\/$yy&#8221;.GetType()<\/p>\n<p>IsPublic IsSerial Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>BaseType<br \/>&#8212;&#8212;&#8211; &#8212;&#8212;&#8211; &#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8211;<br \/>True<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>True<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>String<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>System.Object<\/p>\n<p>PS C:&gt;<\/p>\n<p><\/span><\/span><\/span><\/p>\n<p>  <\/span>\nOne of the really cool things about objects is they have methods and properties. The problem is that our date is a string. Dates are awesome in cakes and in <a href=\"http:\/\/en.wikipedia.org\/wiki\/Oatmeal_cookie\">cookies<\/a>, but not if they are strings. The members of a <b>system.string<\/b> class are suboptimal for dealing with dates. This is shown in the following image.\n<img decoding=\"async\" width=\"600\" src=\"http:\/\/img.microsoft.com\/library\/media\/1033\/technet\/images\/scriptcenter\/qanda\/hsg\/2010\/august\/hey0802\/hsg-08-02-10-01.jpg\" alt=\"Image of members of system.string class\" style=\"max-width: 600px;border: 0px\">\nWhile it is true that I could do string manipulation to parse the date, it would be better if we had a <b>datetime<\/b> object to work with. To do this, we can cast the string to a <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.datetime_members.aspx\">system.datetime<\/a> .NET Framework object. We can then use the <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/system.object.gettype.aspx\">GetType<\/a> method to ensure the conversion has taken place; although this last step is basically redundant because the results of the cast are immediately observable. Remember me saying that using the &ldquo;ugly code&rdquo; could get you into trouble? This is shown here, where an error is thrown. The fix is to use the parentheses:\n<span style=\"color: #0000ff\">  <\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"color: #000000\"><span style=\"font-family: Lucida Sans Typewriter\">PS C:&gt; [datetime]&#8221;$dd\/$mm\/$yy&#8221;<\/p>\n<p>Sunday, May 09, 2010 12:00:00 AM<\/p>\n<p>PS C:&gt; [datetime]&#8221;$dd\/$mm\/$yy&#8221;.GetType()<br \/>Cannot convert the &#8220;System.String&#8221; value of type &#8220;System.RuntimeType&#8221; to type &#8220;System.DateTime&#8221;.<br \/>At line:1 char:32<br \/>+ [datetime]&#8221;$dd\/$mm\/$yy&#8221;.GetType &lt;&lt;&lt;&lt; ()<br \/><span>&nbsp;&nbsp;&nbsp; <\/span>+ CategoryInfo<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>: NotSpecified: (:) [], RuntimeException<br \/><span>&nbsp;&nbsp;&nbsp; <\/span>+ FullyQualifiedErrorId : RuntimeException<\/p>\n<p>PS C:&gt; ([datetime]&#8221;$dd\/$mm\/$yy&#8221;).GetType()<\/p>\n<p>IsPublic IsSerial Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>BaseType<br \/>&#8212;&#8212;&#8211; &#8212;&#8212;&#8211; &#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8211;<br \/>True<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>True<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>DateTime<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.ValueType<\/p>\n<p>PS C:&gt;<\/p>\n<p><\/span><\/span><\/span><\/p>\n<p>  <\/span>\nIn addition to gaining a nicer display of the date, the conversion from string to date has provided a number of useful members. Using the <b>Get-Member<\/b> cmdlet displays the methods and properties that are supplied by the <b>system.datetime<\/b> .NET Framework class:\n<span style=\"color: #0000ff\">  <\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"color: #000000\"><span style=\"font-family: Lucida Sans Typewriter\">PS C:&gt; [datetime]&#8221;$dd\/$mm\/$yy&#8221; | Get-Member<\/p>\n<p><span>&nbsp;&nbsp; <\/span>TypeName: System.DateTime<\/p>\n<p>Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>MemberType<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Definition<br \/>&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;-<br \/>Add<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime Add(System.TimeSpan value)<br \/>AddDays<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddDays(double value)<br \/>AddHours<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddHours(double value)<br \/>AddMilliseconds<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddMilliseconds(double value)<br \/>AddMinutes<span>&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddMinutes(double value)<br \/>AddMonths<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddMonths(int months)<br \/>AddSeconds<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddSeconds(double value)<br \/>AddTicks<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddTicks(long value)<br \/>AddYears<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime AddYears(int value)<br \/>CompareTo<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>int CompareTo(System.Object value), int CompareTo(System.Dat&#8230;<br \/>Equals<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>bool Equals(System.Object value), bool Equals(System.DateTim&#8230;<br \/>GetDateTimeFormats<span>&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>string[] GetDateTimeFormats(), string[] GetDateTimeFormats(S&#8230;<br \/>GetHashCode<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>int GetHashCode()<br \/>GetType<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>type GetType()<br \/>GetTypeCode<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.TypeCode GetTypeCode()<br \/>IsDaylightSavingTime Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>bool IsDaylightSavingTime()<br \/>Subtract<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.TimeSpan Subtract(System.DateTime value), System.Date&#8230;<br \/>ToBinary<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>long ToBinary()<br \/>ToFileTime<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>long ToFileTime()<br \/>ToFileTimeUtc<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>long ToFileTimeUtc()<br \/>ToLocalTime<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime ToLocalTime()<br \/>ToLongDateString<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>string ToLongDateString()<br \/>ToLongTimeString<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>string ToLongTimeString()<br \/>ToOADate<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>double ToOADate()<br \/>ToShortDateString<span>&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>string ToShortDateString()<br \/>ToShortTimeString<span>&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>string ToShortTimeString()<br \/>ToString <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>string ToString(), string ToString(string format), string To&#8230;<br \/>ToUniversalTime<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Method<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime ToUniversalTime()<br \/>Date<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DateTime Date {get;}<br \/>Day<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>System.Int32 Day {get;}<br \/>DayOfWeek<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;\nnbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.DayOfWeek DayOfWeek {get;}<br \/>DayOfYear<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Int32 DayOfYear {get;}<br \/>Hour<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Int32 Hour {get;}<br \/>Kind<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>System.DateTimeKind Kind {get;}<br \/>Millisecond<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Int32 Millisecond {get;}<br \/>Minute<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Int32 Minute {get;}<br \/>Month<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Int32 Month {get;}<br \/>Second<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Int32 Second {get;}<br \/>Ticks<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Int64 Ticks {get;}<br \/>TimeOfDay<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.TimeSpan TimeOfDay {get;}<br \/>Year<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Property<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>System.Int32 Year {get;}<br \/>DateTime<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>ScriptProperty System.Object DateTime {get=if ((&amp; { Set-StrictMode -Version&#8230;<\/p>\n<p>PS C:&gt;<\/p>\n<p><\/span><\/span><\/span><\/p>\n<p>&nbsp;<\/p>\n<p>  <span style=\"color: #000000\">GS, it is obvious that you are not the only one who thought working with dates was annoying. The large collection of methods and properties exposed by the <b>datetime<\/b> class can help to smooth out the difficulty of working with dates. The benefits are immediately available, and most are extremely easy to use. For example, what was the day of the week for our date that we created?<\/span><\/span>\n<span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">([datetime]<\/span><span style=\"color: #808080\">&#8220;$dd\/$mm\/$yy&#8221;<\/span><span style=\"color: #000000\">).dayOfWeek<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #000000\">Sunday<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span>\nWhat was the day of the year?&nbsp;<\/p>\n<div class=\"code\"><span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">([datetime]<\/span><span style=\"color: #808080\">&#8220;$dd\/$mm\/$yy&#8221;<\/span><span style=\"color: #000000\">).dayOfyear<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #800000\">129<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span> <\/div>\n<p>What about if I need to add 45 days to my original date? It is no problem using the <b>addDays<\/b> method:<\/p>\n<p><span style=\"color: #0000ff\">PS<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">C:&gt;<\/span><span style=\"color: #808080\">&nbsp;<\/span><span style=\"color: #000000\">([datetime]<\/span><span style=\"color: #808080\">&#8220;$dd\/$mm\/$yy&#8221;<\/span><span style=\"color: #000000\">).addDays(<\/span><span style=\"color: #800000\">45<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #808080\"> <br \/><\/span><span style=\"color: #000000\">Wednesday,<\/span><span><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Hey, Scripting Guy! I need to be able to use Windows PowerShell to work with dates. Dates have always been a difficult thing to work with, and I just dread scripting anything that has to do with dates. It seemed that VBScript had a dozen functions that were used to work with dates and [&hellip;]<\/p>\n","protected":false},"author":595,"featured_media":87096,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[13,3,4,45],"class_list":["post-17571","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-dates-and-times","tag-scripting-guy","tag-scripting-techniques","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>&nbsp; Hey, Scripting Guy! I need to be able to use Windows PowerShell to work with dates. Dates have always been a difficult thing to work with, and I just dread scripting anything that has to do with dates. It seemed that VBScript had a dozen functions that were used to work with dates and [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/17571","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/users\/595"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/comments?post=17571"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/17571\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media\/87096"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media?parent=17571"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=17571"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=17571"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}