O TimeZoneConverter é uma biblioteca leve para se converter rapidamente entre nomes de fuso horário da IANA, Windows e Rails.
Nota: Um pacote separado TimeZoneConverter.Posix
também está disponível se você precisar de suporte ao fuso horário do POSIX.
TimeZoneConverter
Nuget ao seu projeto.TimeZoneConverter
, quando necessário. A partir da versão 6.0.0, o TimeZoneConverter trabalha com todos os seguintes:
As versões da estrutura do .NET inferiores a 4.6.2 não são mais suportadas.
O .NET 6 possui suporte interno para os fusos horários da IANA e do Windows de maneira cruzada, reduzindo um pouco a necessidade dessa biblioteca. Ele depende da integração da UTI do .NET para executar essa funcionalidade. Veja o blog .NET para obter detalhes.
Reafirmado, se você estiver segmentando apenas o .NET 6 (ou superior) e você terá ativado pela plataforma ou ativado por App-Colal, talvez não precise usar essa biblioteca. No entanto, ele ainda é suportado, e muitos descobriram que ele continua útil em determinados ambientes ou em plataformas específicas.
TimeZoneConverter não possui dependências de dados externas em tempo de execução. Todos os dados necessários estão incorporados na própria biblioteca.
Algumas funções no TimeZoneConverter, como TZConvert.GetTimeZoneInfo
dependem do objeto TimeZoneInfo
subjacente, tendo acesso aos dados do fuso horário do sistema operacional. No Windows, esses dados são provenientes do registro e são mantidos por meio de atualizações do Windows.
No OSX e Linux, esses dados são provenientes de uma distribuição do banco de dados de fuso horário da IANA, geralmente através do pacote tzdata
. Se o seu ambiente não tiver o pacote tzdata
instalado, você precisará instalá -lo para que TZConvert.GetTimeZoneInfo
funcione corretamente.
Por exemplo, as imagens do Docker Alpine Linux para .Net Core não são mais enviadas com tzdata
. Consulte o DOTNET/DOTNET-DOCKER#1366 para obter instruções sobre como adicioná-lo às suas imagens do Docker.
Esta biblioteca usa uma combinação de fontes de dados para atingir seus objetivos:
MAPPING
de ActiveSupport::TimeZone
no código -fonte do Rails.Geralmente, o último é reservado para casos de borda e para zonas recém-introduzidas que podem ou não ter sido publicadas ainda em fontes oficiais.
IMPORTANTE: Como esses dados podem alterar sempre que novos fusos horários são introduzidos em qualquer uma dessas fontes, é recomendável que você sempre use a revisão mais atual e verifique se há atualizações regularmente.
Além disso, esta biblioteca não tenta determinar se os IDs de fuso horário fornecidos estão realmente presentes no computador em que o código está em execução. Supõe -se que o computador seja mantido atualizado com as atualizações do fuso horário.
Por exemplo, se alguém tentar converter Africa/Khartoum
em um ID do Windows Hime Picken, ele terá Sudan Standard Time
. Se for usado em um computador Windows que ainda não possui KB4051956
instalado (que criado neste fuso horário), eles provavelmente receberão um TimeZoneNotFoundException
.
É possível que uma zona seja implementável - o que significa que não há equivalente lógico de um tipo de fuso horário para outro.
Atualmente, existe apenas uma zona da IANA que não é aplicável para o Windows, que é Antarctica/Troll
. Em outras palavras, não há fuso horário "correto" para usuários do Windows que podem estar estacionados na estação de Troll, na Antártica. Portanto, se você tentar converter Antarctica/Troll
em Windows, obterá uma TimeZoneNotFoundException
.
Existem muitas zonas que não são aplicáveis aos trilhos. A lista completa está no código de teste da unidade aqui.
Converta um nome de fuso horário da IANA no ID do fuso horário do Windows mais adequado.
string tz = TZConvert . IanaToWindows ( " America/New_York " ) ;
// Result: "Eastern Standard Time"
Converta um nome de fuso horário do Windows no nome do zona horário da IANA MELHOR.
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " ) ;
// result: "America/New_York"
Converta um nome de fuso horário do Windows no nome do fuso horário da IANA MELHOR, com relação a um país específico.
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " , " CA " ) ;
// result: "America/Toronto"
Obtenha um objeto TimeZoneInfo
do .NET Core, independentemente do sistema operacional que você está executando:
// Either of these will work on any platform:
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " Eastern Standard Time " ) ;
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " America/New_York " ) ;
Converta um nome de fuso horário do Rails no melhor nome da IANA FONE IANA.
string tz = TZConvert . RailsToIana ( " Mexico City " ) ;
// result: "America/Mexico_City"
Converta um nome de fuso horário do Rails no ID do fuso horário do Windows mais adequado.
string tz = TZConvert . RailsToWindows ( " Mexico City " ) ;
// result: "Central Standard Time (Mexico)"
Converta um nome de fuso horário da IANA em um ou mais nomes de fuso horário do Rails.
IList < string > tz = TZConvert . IanaToRails ( " America/Mexico_City " ) ;
// Result: { "Guadalajara", "Mexico City" }
Converta um ID do fuso horário do Windows em um ou mais nomes de fuso horário dos trilhos.
IList < string > tz = TZConvert . WindowsToRails ( " Central Standard Time (Mexico) " ) ;
// Result: { "Guadalajara", "Mexico City" }
Existem alguns ajudantes adicionais que você pode achar úteis.
Essas propriedades fornecem listas dos vários tipos de fusos horários conhecidos nesta biblioteca:
TZConvert.KnownIanaTimeZoneNames
TZConvert.KnownWindowsTimeZoneIds
TZConvert.KnownRailsTimeZoneNames
Se você precisar de uma lista de fusos horários aplicáveis em uma determinada região, poderá usar:
TZConvert.GetIanaTimeZoneNamesByTerritory()
Esta biblioteca é fornecida gratuitamente, nos termos da licença do MIT.