雖然這是一個有點天真......也許,這是獲得一個一種方式沒有開關聲明的縮寫:
[Regex]::Replace([System.TimeZoneInfo]::Local.StandardName, '([A-Z])\w+\s*', '$1')
我的regu年輕的表情可能會讓人有些不滿。
上述我的時區輸出爲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
是否看起來像是一組詞或者只是偏移指定,因爲它沒有標準名稱。
在美國以外的問題較少的人似乎也遵循了三個詞格式:
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
工程就像一個美麗! –
@Ken我有點尷尬,但我很高興它做到了這一招:)。 – Shibumi
'SA太平洋標準時間'變成'SPST';這並不準確。您提供的信息非常有幫助。我決定只是爲了獲得分鐘抵消: '[System.TimeZone] :: CurrentTimeZone.GetUtcOffset([datetime] :: Now).TotalMinutes' – VertigoRay