Display current time with time zone in PowerShell
powershell, time, timezone
Solution
While this is a bit ... naive perhaps, it's one way to get an abbreviation without a switch statement:
[Regex]::Replace([System.TimeZoneInfo]::Local.StandardName, '([A-Z])\w+\s*', '$1')
My regular expression probably leaves something to be desired.
The output of the above for my time zone is `EST`. I did some looking as I wanted to see what the value would be for other GMT offset settings, but .NET doesn't seem to have very good links between `DateTime` and `TimeZoneInfo`, so I couldn't just programmatically run through them all to check. This might not work properly for some of the strings that come back for `StandardName`.
EDIT: I did some more investigation changing the time zone on my computer manually to check this and a `TimeZoneInfo` for `GMT+12` looks like this:
PS> [TimeZoneInfo]::Local
Id : UTC+12
DisplayName : (GMT+12:00) Coordinated Universal Time+12
StandardName : UTC+12
DaylightName : UTC+12
BaseUtcOffset : 12:00:00
SupportsDaylightSavingTime : False
Which produces this result for my code:
PS> [Regex]::Replace([System.TimeZoneInfo]::Local.StandardName, '([A-Z])\w+\s*', '$1')
U+12
So, I guess you'd have to detect whether the `StandardName` appears to be a set of words or just offset designation because there's no standard name for it.
The less problematic ones outside the US appear to follow the three-word format:
PS> [TimeZoneInfo]::Local
Id : Tokyo Standard Time
DisplayName : (GMT+09:00) Osaka, Sapporo, Tokyo
StandardName : Tokyo Standard Time
DaylightName : Tokyo Daylight Time
BaseUtcOffset : 09:00:00
SupportsDaylightSavingTime : False
PS> [Regex]::Replace([System.TimeZoneInfo]::Local.StandardName, '([A-Z])\w+\s*', '$1')
TST
Problem
I'm trying to display the local time on my system with the TimeZone. How can I display time in this format the simplest way possible on any system?: Time: 8:00:34 AM EST I'm currently using the following script: ``` $localtz = [System.TimeZoneInfo]::Local | Select-Object -expandproperty Id if ($localtz -match "Eastern") {$x = " EST"} if ($localtz -match "Pacific") {$x = " PST"} if ($localtz -match "Central") {$x = " CST"} "Time: " + (Get-Date).Hour + ":" + (Get-Date).Minute + ":" + (Get-Date).Second + $x ``` I'd like to be able to display the time without relying on simple logic, but be able to give the local timezone on any system.