C # horário de verão britânico (BST) fuso horário abreviatura

Eu preciso exibir um label com a abreviação do fuso horário atual. O fuso horário do meu PC está atualmente definido para “(GMT) Greenwich Mean Time: Dublin, Edimburgo, Lisboa, Londres”. Como resultado, gostaria de ver o BST exibido, uma vez que o LN está atualmente no horário de verão britânico.

Parece que essa informação (fbrz do fuso horário) não está disponível. Olhando para o GMT TimeZoneInfo, tudo o que posso ver em relação aos nomes é

Id "GMT Standard Time" StandardName "GMT Standard Time" DaylightName "GMT Daylight Time" 

Existe alguma maneira de chegar ao BST a partir de “GMT Daylight Time” ou qualquer outra informação de fuso horário do Windows disponível?

A class TimeZoneInfo refere-se a “horário de verão britânico” como “Horário de verão GMT”, portanto não, não é possível. Se a Microsoft o armazenasse como “BST”, seria na propriedade DaylightName .

Embora acompanhando o desenvolvimento da class TimeZoneInfo no blog da BCL há muitos anos, não vi nenhuma explicação sobre como eles escolheram os valores para DaylightName . Se eu fosse adivinhar, seria porque isso é para um “fuso horário” e não uma cidade em particular.

Parece que o tzdatabase de domínio público , que é considerado mais completo que o database de fuso horário da Microsoft, exibe o BST para London ( origem ). Isso ocorre porque as cidades estão incluídas neste dataset, não apenas nos fusos horários. Existe um projeto chamado Noda Time que traz o tzdatabase para o .net que agora está disponível.

Eu acho que você tem duas opções: tratamento de caso especial para o fuso horário GMT ou tratamento generalizado para “fusos horários para o qual a Microsoft usa um nome incorreto”.

Pergunto-me, por exemplo, se os portugueses usam “GMT” para o seu fuso horário no inverno. Se eles fazem ou não, duvido que eles usam “Horário de Verão britânico” no verão!

Você deve saber que todos os fusos horários que dizem “Padrão” mudarão corretamente para o horário de verão no verão. Por exemplo, TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time") será um object que pode manipular corretamente os tempos padrão e de luz do dia. O mesmo vale para, digamos, "Pacific Standard Time" .