Existe alguma maneira de converter um fuso horário da “Austrália/Melbourne” em algum objeto de biblioteca da classe base .NET?

StackOverflow https://stackoverflow.com/questions/661848

  •  20-08-2019
  •  | 
  •  

Pergunta

Eu tenho alguns dados de uma terceira parte que inclui alguns string Language dados da propriedade. Alguns dados de amostra recuperados se parecem:

"Austrália/Melbourne"

Quando investigei que o que o tipo de dados da propriedade se baseava, é um Informações da zona (banco de dados TZ / banco de dados OLSON). WTF é isso? Eu pesquisei e aqui está a informação ....

Parece que é usado por muitas plataformas principais ... mas não .NET.

Então, antes de reinventar a roda (ou, mais direto, atualizar o código desse site CodePlex para incorporar a lista de banco de dados na DLL), isso já existe na biblioteca da classe base .NET?

Foi útil?

Solução

É uma info da zona (banco de dados TZ / banco de dados OLSON). WTF é isso?

É o portátil, praticamente padrão maneira de representar fusos horários. É uma pena que o .NET não o apoie corretamente, IMO.

Você está usando .NET 3.5? Se sim, o TimeZoneInfo A classe é o melhor suporte que temos, mas converter do nome Olson para o nome do Windows pode ser complicado. Idealmente, você deseja uma conversão do Olson ID para o ID que o Windows usa ... Não sei se há uma disponível.

EDIT: Após um pouco de escavação, alguns links:

Não sei com que frequência eles são mantidos atualizados, mas podem muito bem ser sua melhor aposta.

Outras dicas

Há uma ótima biblioteca .NET no projeto de código que faz exatamente o que você precisa:

http://www.codeproject.com/kb/locale/zoneinfo_dotnet_api.aspx

http://zoneinfo.codeplex.com/

Eu uso isso em vários projetos que conversam com as APIs do Google, pois todos os seus fusos horários estão no formato de banco de dados ZoneInfo/Olsen.

Eu também escrevi uma postagem no blog sobre como configurá -lo: http://www.diaryofaninja.com/blog/2011/05/27/how-to-use-zoneinfotz-time-zones-in-net-applications

convertê -lo para GMT? Procure as horas +x hrs ou -x e subtraia o deslocamento da data/hora que você armazenou. por exemplo. No seu exemplo, subtraia 10, pois Melbourne é +10 GMT ??

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top