Format Date in PowerShell: A Quick Reference

PowerShell Format Date

As someone who works with PowerShell on a daily basis, I know how important it is to be able to format dates correctly. PowerShell Get-Date is a powerful cmdlet that allows users to retrieve and manipulate date and time information in their scripts. By default, Get-Date returns the current date and time in the system’s standard format. However, understanding how to convert and format date and time values in PowerShell is essential for effective scripting and data manipulation.

Whether you’re dealing with datetime values or simply need to convert a date to a specific format, mastering PowerShell’s date formatting capabilities is essential. In this comprehensive guide, we will discuss PowerShell date formats and how you can leverage them to format dates to your preferred format.

Why the date format is important in PowerShell?

Date formatting determines how date and time information is displayed and processed within scripts. It plays a vital role in PowerShell for several reasons. Firstly, different systems, regions, and applications may use different date formats, and you may need to convert them to a specific format to ensure compatibility. Secondly, when working with files or databases, accurate date formatting is crucial for sorting, filtering, and querying data effectively. Lastly, presenting dates in a human-readable format is essential for generating reports or displaying information to end-users. By mastering date formatting in PowerShell, you can ensure consistency, accuracy, and usability in your scripts and automation tasks.

Understanding the Different Types of Date Formats in PowerShell

format date in powershell

Before you can start formatting dates in PowerShell, it’s important to understand the different types of date formats that are available. The most common format is the “dd/mm/yyyy” or “mm/dd/yyyy” format, where “dd” represents the day, “mm” represents the month, and “yyyy” represents the year. However, PowerShell supports a wide range of date formats, including those with or without time components, and different separators like hyphens or slashes.

In PowerShell, you can format date and time using the Get-Date cmdlet and its -Format parameter. The -Format parameter allows you to specify the output format of the date and time. You can use custom date and time format strings to control how the formatting is performed.

Formatting Dates Using the Get-Date Cmdlet

PowerShell provides a multitude of ways to format dates. One of the simplest ways to convert a date format is by utilizing the -Format parameter of the Get-Date cmdlet. This parameter lets you specify a custom format string to display the date and time in a desired format.

For example, if you wanted to display the current date and time in the format “dd/MM/yyyy HH:mm:ss”, you could use the following command:

Get-Date -Format "dd/MM/yyyy HH:mm:ss"

This would return a string that represents the current date and time in the desired format. E.g., “22/08/2021 14:03:16”. By default, the result of Get-Date cmdlet will be in the format based on your computer settings. To view your current device date settings, use the (Get-Culture).DateTimeFormat.

Here is the list of common format patterns:

SpecifiedFormat
dShort date pattern (e.g., “5/25/2023”)
DLong date pattern (e.g., “Thursday, May 25, 2023”)
tShort time pattern (e.g., “2:30 PM”) for getting the current time
TLong-time formats (e.g., “2:30:00 PM”)
fFull date/time pattern (short time) (e.g., “Thursday, May 25, 2023 2:30 PM”)
FFull date/time pattern (long time) (e.g., “Thursday, May 25, 2023 2:30:00 PM”)
gGeneral date/time pattern (short time) (e.g., “5/25/2023 2:30 PM”)
GGeneral date/time pattern (long time) (e.g., “5/25/2023 2:30:00 PM”)
M or mMonth day pattern (e.g., “May 25”)
Y or yYear month pattern (e.g., “May, 2023”)
sSortable Date Time (e.g., “2023-08-22T22:51:27”)
uUniversal Sortable DateTime (e.g., “2022-01-01 00:00:00Z”)
UFull date and time using universal time coordinate – UTC (e.g., “Friday, December 31, 2023 8:00:00 PM”)

We also have the DisplayHint parameter in the Get-Date cmdlet, which supports Date, DateTime, and Time values. E.g.,

 Get-Date -DisplayHint Date
Get-Date DisplayHint

If you try to get all properties returned by Get-Date cmdlet, you’ll see Days of the year, Month number, Timestamp string, etc.

Get-Date | Select -Property *

#Output:
DisplayHint : DateTime
DateTime    : Monday, February 19, 2022 10:37:37 PM
Date        : 2/19/2022 12:00:00 AM
Day         : 19
DayOfWeek   : Monday
DayOfYear   : 50
Hour        : 22
Kind        : Local
Millisecond : 812
Minute      : 37
Month       : 2
Second      : 37
Ticks       : 638439790578128518
TimeOfDay   : 22:37:37.8128518
Year        : 2022

[DateTime] Object methods with different formats

The DateTime object also offers some methods to retrieve Date and Time in different formats:

  • ToLongDateString()
  • ToShortDateString
  • ToLongTimeString()
  • ToShortTimeString
  • ToUniversalTime()
  • IsDaylightSavingTime()

The above methods are self-explanatory. E.g., IsDaylightSavingTime() method checks whether a date is adjusted for daylight savings time or not.

Formatting Dates Using the ToString() Method

Another way to format dates in PowerShell is to use the ToString() method. This method allows you to convert a date object to a string representation using a specific date format.

For example, if you had a DateTime object representing January 1st, 2022, and you wanted to convert it to a string in the format “yyyy/MM/dd”, you could use the following command:

$Date = Get-Date "01/01/2022"
$Date.ToString("yyyy/MM/dd")

This would return the string “2022/01/01”. Similarly, to get the Date in yyyyMMdd format, use:

(Get-Date).ToString("yyyyMMdd")
#Output: 20220219

Here are some of the most common date format strings used in PowerShell:

FormatOutput
dd/MM/yyyyThis format represents the day, month, and year of a date, separated by slashes. For example, “01/01/2022” would represent January 1st, 2022.
MM/dd/yyyyThis format is similar to the previous one, but with the month and day reversed. For example, “01/01/2022” would represent January 1st, 2022.
yyyy/MM/ddThis format represents the year, month, and day of a date, separated by slashes. For example, “2022/01/01” would represent January 1st, 2022.
yyyy-MM-ddThis format is similar to the previous one, but with hyphens instead of slashes. For example, “2022-01-01” would represent January 1st, 2022.
yyyy/MM/dd HH:mm:ssThis format represents the year, month, and day of a date, followed by the hours, minutes, and seconds, separated by slashes and colons. For example, “2022/01/01 12:00:00” would represent noon on January 1st, 2022.
yyyy-MM-ddTHH:mm:ssThis format is similar to the previous one, but with a “T” separating the date and time components. For example, “2022-01-01T12:00:00” would represent noon on January 1st, 2022.

For all .Net Date formats, refer to: Custom date and time format strings

Converting Date Formats Using the ParseExact() Method

Sometimes you may need to convert a date string from one format to another. This can be done using the ParseExact() method, which allows you to parse a date string using a specific format string, and then convert it to a DateTime object.

For example, if you had a date string in the format “dd/MM/yyyy” and you needed to convert it to the format “yyyy/MM/dd”, you could use the following command:

$dateString = "01/01/2022"
$myDate = [DateTime]::ParseExact($dateString, "dd/MM/yyyy", $null)
$myDate.ToString("yyyy/MM/dd")

This would return the string “2022/01/01”.

Using the -f Operator for Custom Date Formatting

In addition to the methods and cmdlets we’ve already covered, PowerShell also provides a powerful -f operator that can be used to create custom date formats. This operator allows you to specify a format string that includes placeholders for different date components, which are then replaced with the corresponding values at runtime.

For example, if you wanted to display the current date and time in the format “yyyy/MM/dd HH:mm:ss”, you could use the following command:

"{0:yyyy/MM/dd HH:mm:ss}" -f (Get-Date)

This would return a string that represents the current date and time in the desired format. E.g., “2021/08/22 14:04:32”

Converting Datetime Values to String Format

To convert a datetime value to a string format, you can use the same methods and cmdlets we covered earlier for date values. For example, if you had a datetime object representing noon on January 1st, 2022, and you wanted to convert it to a string in the format “yyyy/MM/dd HH:mm:ss”, you could use the following command:

$DateTime = Get-Date "01/01/2022 12:00:00"
$DateTime.ToString("yyyy/MM/dd HH:mm:ss")

This would return the string “2022/01/01 12:00:00”.

Converting PowerShell date format to dd/mm/yyyy

Converting the PowerShell date format to the “dd/mm/yyyy” format is a common requirement in many regions. To convert the date format, you can use the Get-Date cmdlet combined with the -Format parameter. Below are some examples:

$currentDate = Get-Date -Format "dd/MM/yyyy"
Write-Output $currentDate

Convert a Specific Date String to “dd/mm/yyyy” Format:

Assuming you have a date string in the format “yyyy-MM-dd” (like “2021-08-21”) and you want to convert it:

$DateObject = [datetime]"2021-08-21"
$CnvertedDate = $DateObject.ToString("dd/MM/yyyy")
Write-Output $ConvertedDate

You can also use the Regular Expression with -replace operator to rearrange the date components and add the necessary separators.

For example, let’s say we have a date string in the format “yyyy-MM-dd” and we want to convert it to “dd/mm/yyyy”. We can achieve this by using the following PowerShell command:

# Sample date string in "yyyy-MM-dd" format
$dateString = "2021-08-21"

# Use regular expression to rearrange the format
$convertedDate = $dateString -replace '^(\d{4})-(\d{2})-(\d{2})$', '$3/$2/$1'

# Output the result
Write-Output $convertedDate

In this example, we use the -replace operator to capture the year, month, and day components of the date string and rearrange them with the “/” separator.

Formatting Dates for Different Regions and Languages

One important consideration when formatting dates in PowerShell is: support for different regions and languages. Depending on the locale of your system or application, you may need to use different date formats or display date components in a different order.

To format dates for different regions and languages in PowerShell, you can use the CultureInfo class. This class provides information about a specific culture or region, including its date and time formats.

For example, if you wanted to display the current date and time in the format used in France, you could use the following command:

$culture = [System.Globalization.CultureInfo]::GetCultureInfo("fr-FR")
Get-Date -Format $culture.DateTimeFormat.ShortDateTimePattern

This would return a string that represents the current date and time in the format used in France.

PowerShell Get-Date -UFormat

The -UFormat parameter of PowerShell’s Get-Date cmdlet allows you to specify a custom format string using UNIX-style formatting placeholders. This parameter provides a comprehensive set of formatting options that can be used to display date and time values in a wide range of formats.

To use the -UFormat specifier, you need to specify the desired formatting placeholders. For example, to display the date and time in the format “Saturday, January 01, 2022 12:00:00 AM”, you can use the following PowerShell command:

Get-Date -UFormat "%A, %B %d, %Y %I:%M:%S %p"

The %A, %B, %d, %Y, %I, %M, %S, and %p are UNIX formats representing the day of the week, month, day, year, hour, minute, second, and AM/PM indicator, respectively. In this case, Here, %A denotes the Day of the week (E.g., Monday), %B’s Month name is January, etc. Refer to the Microsoft Official documentation to get a complete list of all supported format strings.

PowerShell date format cheat sheet

To help you navigate the various date format options available in PowerShell, here’s a breakdown of commonly used format specifiers:

  1. Year:
    • yy: 2-digit format of the year, e.g., 22.
    • yyyy: Year in 4-digit format, e.g., 2022.
  2. Month:
    • M: Month without leading zeros, e.g., 8.
    • MM: Month with leading zeros, e.g., 08.
    • MMM: Abbreviated month name, e.g., Aug.
    • MMMM: Full month name, e.g., August.
  3. Day:
    • d: Day of the month without leading zeros, e.g., 5.
    • dd: Day of the month with leading zeros, e.g., 05.
    • ddd: Abbreviated day of the week, e.g., Tue.
    • dddd: Full name of the day of the week, e.g., Tuesday.
  4. Hour:
    • h: 12-hour format without leading zeros.
    • hh: 12-hour format with leading zeros.
    • H: 24-hour format without leading zeros.
    • HH: 24-hour format with leading zeros.
  5. Minute:
    • m: Minutes without leading zeros.
    • mm: Minutes with leading zeros.
  6. Second:
    • s: Seconds without leading zeros.
    • ss: Seconds with leading zeros.
  7. AM/PM Designator:
    • tt: Displays AM or PM.
    • t: Short time format (e.g., 12:00 AM)

To get all date formats as per the local machine settings, use the following script:

$DateTimeFormats = (Get-Date).GetDateTimeFormats()
$Formats = @()
$i=0
$DateTimeFormats | ForEach-Object {
    $Formats+= [PSCustomObject]@{
        'IndexNumber' = $i
        'DateTime Format' = $DTFormats[$i]
    }
    $i++
}
#Get All formats in Grid View
$Formats | Out-GridView
get-date formats

If you want to get the date time in the specified format, you can use:

$Formats[1].'DateTime Format'

Best Practices for Date Formatting in PowerShell

Now that we’ve covered the basics of date formatting in PowerShell, let’s review some best practices to keep in mind when working with dates in your scripts and applications:

  • Always test your date formatting code in various scenarios to ensure it works as expected.
  • Consider using the -ErrorAction parameter with cmdlets and methods that work with dates, to handle any errors that may arise.
  • Consider storing dates in variables and manipulating their formats instead of repeatedly calling the Get-Date cmdlet. This improves script performance and allows for easier maintenance.
  • When working with datetime values, be sure to take the 24-hour clock format into account.
  • When working with datetime values that include time zone offset information, be sure to handle the time zone appropriately.
  • Be aware of regional and system-specific date formats to ensure compatibility across different environments.
  • Use standard date formats whenever possible to enhance readability and maintain consistency.
  • Utilize custom format strings and string operators to convert date and time values to the desired format.
  • Document and comment on your code when working with complex date format conversions to improve maintainability.

By following these best practices, you can ensure that your PowerShell scripts handle date and time values in a consistent and reliable manner.

Troubleshooting Common Date Formatting Errors

Even with the best practices in mind, it’s still possible to encounter errors when working with date formatting in PowerShell. Here are a few common errors you may encounter, along with some tips for troubleshooting them:

  • “String was not recognized as a valid DateTime”: This error occurs when you try to parse a date string using a format that doesn’t match the actual format of the string. Double-check the format string you’re using to ensure it matches the actual format of the date string.
  • “The format of the input string is invalid”: This error occurs when you try to convert a date string to a DateTime object using an invalid format string. Double-check the format string you’re using to ensure it’s valid.
  • “Input string was not in a correct format”: This error occurs when you try to convert a date string to a DateTime object using an invalid format string. Double-check the format string you’re using to ensure it’s valid.

Conclusion

In conclusion, mastering date formatting in PowerShell is essential for anyone who works with this powerful tool regularly. By understanding the different types of date formats, and using the appropriate methods and operators, you can ensure that your scripts and applications work correctly and efficiently. Experiment with different format options and custom format strings to achieve the desired date and time representation in your scripts. Remember to always test your code thoroughly, and to follow best practices to minimize errors and ensure maximum compatibility. With these tips in mind, you’ll be well on your way to becoming a PowerShell date formatting pro.

Salaudeen Rajack

Salaudeen Rajack - Information Technology Expert with Two-decades of hands-on experience, specializing in SharePoint, PowerShell, Microsoft 365, and related products. He has held various positions including SharePoint Architect, Administrator, Developer and consultant, has helped many organizations to implement and optimize SharePoint solutions. Known for his deep technical expertise, He's passionate about sharing the knowledge and insights to help others, through the real-world articles!

Leave a Reply

Your email address will not be published. Required fields are marked *