Während dies etwas ist ... naiv vielleicht, es ist ein Weg, eine zu erhalten Abkürzung ohne Schalteranweisung:
[Regex]::Replace([System.TimeZoneInfo]::Local.StandardName, '([A-Z])\w+\s*', '$1')
Mein regu lar Ausdruck lässt wahrscheinlich etwas zu wünschen übrig.
Die Ausgabe der oben genannten für meine Zeitzone ist EST
. Ich schaute etwas, als ich sehen wollte, was der Wert für andere GMT-Offseteinstellungen sein würde, aber .NET scheint nicht sehr gute Verbindungen zwischen DateTime
und TimeZoneInfo
zu haben, also konnte ich nicht einfach programmgesteuert alle durchgehen, um zu überprüfen . Dies funktioniert möglicherweise nicht richtig für einige der Zeichenfolgen, die für StandardName
zurückkommen.
EDIT: ich einige weitere Untersuchung habe die Zeitzone auf dem Computer ändert manuell wie folgt aussieht TimeZoneInfo
für GMT+12
dies und zu überprüfen:
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
, die dieses Ergebnis für meinen Code erzeugt:
Also, ich denke, Sie müssten erkennen, ob die StandardName
scheint eine Reihe von Wörtern oder nur Offset-Bezeichnung, weil es keinen Standardnamen dafür ist.
Die weniger problematischen außerhalb der USA erscheinen die Drei-Wort-Format folgen:
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
Funktioniert wie eine Schönheit! –
@Ken Ich war ein wenig peinlich berührt, aber ich bin froh, dass es den Trick gemacht hat :). – Shibumi
'SA Pacific Standard Time' wird' SPST'; Das ist nicht wirklich genau. Die Informationen, die Sie gaben, waren jedoch sehr hilfreich. Ich entschied mich dafür, mich nur darauf zu beschränken, den Minuten-Offset zu bekommen: '[System.TimeZone] :: CurrentTimeZone.GetUtcOffset ([datetime] :: Now) .TotalMinutes' – VertigoRay