虽然这是一个有点天真......也许,这是获得一个一种方式没有开关声明的缩写:
[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