これは少し...ナイーブかもしれませんが、switchステートメントなしで略語を取得する1つの方法です:
[Regex]::Replace([System.TimeZoneInfo]::Local.StandardName, '([A-Z])\w+\s*', '$1')
私の正規表現には、おそらく何かが必要です。
私のタイムゾーンに対する上記の出力はEST
. 他のGMTオフセット設定の値がどうなるかを確認したかったので、いくつか調べましたが、.NETは と の間にあまり良いリンクを持っていないようDateTime
ですTimeZoneInfo
。これは、 に返される一部の文字列では正しく機能しない場合がありますStandardName
。
編集:TimeZoneInfo
これを確認するために、コンピューターのタイムゾーンを手動で変更してさらに調査を行いました。これはGMT+12
次のようになります。
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
私のコードでは次の結果が得られます。
PS> [Regex]::Replace([System.TimeZoneInfo]::Local.StandardName, '([A-Z])\w+\s*', '$1')
U+12
StandardName
したがって、標準的な名前がないため、一連の単語のように見えるのか、単なるオフセット指定であるのかを検出する必要があると思います。
米国以外で問題の少ないものは、3 語形式に従っているようです。
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