Jestem świadomy klasy System.TimeZone, a także wielu zastosowań metody DateTime.ToString(). To, czego nie udało mi się znaleźć, jest sposobem na konwersję DateTime na ciąg znaków, który oprócz informacji o czasie i dacie zawiera trzyliterowy skrót strefy czasowej (w rzeczywistości w bardzo podobny sposób, jak podpowiedzi StackOverflow dla względnego wyświetlacz czasu działa).Jak wyświetlić DateTime ze skróconą strefą czasową?
Aby ułatwić przykład użytkownikom naśladowania i konsumpcji, kontynuujmy przykład StackOverflow. Jeśli spojrzysz na etykietkę narzędziową wyświetlaną w czasie względnym, wyświetli się ona z pełną datą, czasem obejmującym sekundy w formacie dwunastogodzinnym, oznaczeniem AM/PM, a następnie trzyliterowym skrótem strefy czasowej (w ich przypadku, skoordynowanym Czas uniwersalny). Zdaję sobie sprawę, że mogę łatwo uzyskać GMT lub UTC za pomocą wbudowanych metod, ale to, czego naprawdę chcę, to czas, ponieważ jest lokalnie — w tym przypadku na serwerze sieciowym.
Jeśli nasz serwer sieciowy ma system Windows Server 2k3 i ma ustawioną strefę czasową na CST (lub, aż do daylight saving przełącza się z powrotem, CDT to jest?), Chciałbym, aby nasza aplikacja internetowa ASP.NET wyświetlała wartości DateTimes w stosunku do w tej strefie czasowej, a także sformatowany do wyświetlania "CST" na końcu. Rozumiem, że mogłem z łatwością zakodować to, ale w interesie solidności wolałbym rozwiązanie oparte na serwerze z ustawieniami środowiska operacyjnego kodu kodu.
Teraz mam wszystko poza skrótem strefy czasowej przy użyciu następującego kodu:
myDateTime.ToString("MM/dd/yyyy hh:mm:ss tt")
który wyświetla:
10/07/2008 03:40:31 PM
Wszystko Chcę (i nie jest to zbyt wiele, obietnica!), Żeby to powiedzieć:
10/07/2008 03:40:31 PM CDT
Mogę używać System.TimeZone.CurrentTimeZone i używać go do prawidłowego wyświetlania "Central Daylight Time", ale ... to trochę za długo dla zwięzłości. Czy utknąłem wtedy na pisaniu procedury manipulowania strunami w celu usunięcia białych znaków i dowolnych małych liter? Chociaż to może zadziałać, to wydaje mi się nie do zniesienia ...
Googling i rozejrzenie się tutaj nie przyniosło niczego, co dotyczyłoby mojego konkretnego pytania.
To podejście ma kilka wad. Na przykład w Arizonie, gdzie korzystają z Mountain Standard Time i nie obserwują czasu letniego, .NET ma DaylightName i StandardName z "US Mountain Standard Time", które pokaże "UMST" z twoją metodą. Spodziewałbym się zamiast tego "MST" (zarówno latem, jak i zimą). Niestety, platforma .NET wydaje się tu nie nadawać, więc uciekłem się do statycznej tablicy odnośników. – codemonkey
Nie będzie działać w przypadku wielu stref czasowych, np. ** ACT ** _Acre Time_ (UTC -5) – Tanmay