Display current time with time zone in PowerShell

前端 未结 7 827
盖世英雄少女心
盖世英雄少女心 2021-02-14 02:06

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 ES

7条回答
  •  被撕碎了的回忆
    2021-02-14 02:57

    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
    

提交回复
热议问题