Конвертировать .Net TimeZoneInfo в часовой пояс POSIX - PullRequest
0 голосов
/ 20 декабря 2018

Мне нужно преобразовать часовой пояс в .Net в POSIX часовой пояс .Я могу получить начало, конец и дельту для перехода на летнее время из TimeZoneInfo через GetAdjustmentRules, но тогда мне все равно не хватает кодов сокращений часовых поясов (например, MST / MDT, PST / PDT и т. Д.).Делаем это в C # .Net.

По сути, я ищу противоположность этому: Преобразование часового пояса в стиле posix в timezoneinfo в c # .net

Существует ли какое-либо существующее решениекак это?Или кто-нибудь знает, где я могу получить стандартные и летние коды аббревиатур?

1 Ответ

0 голосов
/ 21 декабря 2018

Я только что добавил поддержку строк часового пояса POSIX в качестве дополнения для моего TimeZoneConverter проекта.Он находится в отдельной упаковке под названием TimeZoneConverter.Posix.Установите его, и вы можете сделать следующее:

string posix = PosixTimeZone.FromTimeZoneInfo(SomeTimeZoneInfoObject);

Кроме того, вы можете просто указать идентификатор часового пояса Windows или имя часового пояса IANA, и это также будет работать:

string posix = PosixTimeZone.FromWindowsTimeZoneId("Eastern Standard Time");
// Result: "EST5EDT,M3.2.0,M11.1.0"

string posix = PosixTimeZone.FromIanaTimeZoneName("Australia/Sydney");
// Result: "AEST-10AEDT,M10.1.0,M4.1.0/3"

Имейте в виду, что вы все еще подвержены ограничениям часовых поясов POSIX:

  • Они могут поддерживать только два перехода в год.
  • Не все переходы часовых поясов предназначены дляDST.Некоторые для изменений в стандартном времени, и это не отражено здесь.Они будут выглядеть как переходы DST.
  • Они не предоставляют каких-либо исторических изменений самим себе.

В последнем пункте в показанных выше примерах используется current year, но существуют также перегрузки для предоставления года для генерации строки, специфичной для этого года.

...