Поскольку экземпляр DateTime
не хранит информацию о часовом поясе, это невозможно сделать с помощью пользовательских строк формата даты и времени."zzz"
спецификатор предназначен для Смещение UTC значение, DateTime.Kind
с "K"
, спецификатор также не отражает сокращение часового пояса.И то, и другое бесполезно для вашего случая.
Тем не менее, существует пакет nuget с именем TimeZoneNames , который написан специалистом по часовым поясам Мэттом Джонсоном , что вы можете получить сокращения часового пояса.имя (поддерживает IANA и идентификатор часового пояса Windows)
var tz = TZNames.GetAbbreviationsForTimeZone("Pacific Standard Time", "en-US");
Console.WriteLine(tz.Standard); // PST
Console.WriteLine(tz.Daylight); // PDT
Если вы хотите получить программный идентификатор часового пояса Windows, вы можете использовать TimeZoneInfo.Local.Id
свойство , если вы хотите получить текущий код языка, вы можете использовать CultureInfo.CurrentCulture.Name
свойство между прочим.
var tz = TZNames.GetAbbreviationsForTimeZone(TimeZoneInfo.Local.Id, CultureInfo.CurrentCulture.Name);
Но перед этим вы должны проверить, что местное время - летнее времячтобы выбрать, какое сокращение добавить вашу отформатированную строку.
DateTime now = DateTime.Now;
bool isDaylight = TimeZoneInfo.Local.IsDaylightSavingTime(now);
Если isDaylight
равно true
, вы должны использовать результат свойства TimeZoneValues.Daylight
, в противном случае вам следует использовать свойство TimeZoneValues.Standard
первая часть кода.
В конце необходимо добавить одну из этих аббревиатур в конце строки DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss)
.
Для важной заметки Мэтта на странице пакета;
TСокращения в некоторых зонах иногда противоречивы и не обязательно правильно локализованы для каждого часового пояса.В большинстве случаев вы должны использовать сокращения только для отображения конечного пользователя.Не пытайтесь использовать сокращения при разборе ввода.
Второе важное замечание из Комментарий Мэтта ;
Что заставляет вас думать, что сокращение часового поясана самом деле существует для каждого часового пояса и каждого языка в мире?Даже тогда, что заставляет вас думать, что сокращение часового пояса достаточно для определения часового пояса?Подсказка - оба вопроса аморфны.Рассмотрим «CST» или «IST» - у каждого есть три или четыре места в мире, которым они могут принадлежать.Много-много-много других случаев ...