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.
While this is a bit … naive perhaps, it’s one way to get an abbreviation without a switch statement:
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 betweenDateTimeandTimeZoneInfo, 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 forStandardName.EDIT: I did some more investigation changing the time zone on my computer manually to check this and a
TimeZoneInfoforGMT+12looks like this:Which produces this result for my code:
So, I guess you’d have to detect whether the
StandardNameappears 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: