TimeZoneInfo
ano, ano. (Je to součást rámce .NET, nikoli část C# – C# je pouze jazyk, který náhodou používáte.) Nemyslím si však, že to je to, co opravdu chcete dělat.
Proč ukládáte DateTime
na serveru vůbec časové pásmo? Ve většině případů by bylo rozumnější uložit jej v UTC. Kromě čehokoli jiného, pokud je váš server v časové zóně, která dodržuje letní čas, skončíte s nejednoznačností na jednu hodinu za rok, když se hodiny vrátí. (Stejný místní čas se vyskytuje dvakrát.)
Jakmile jej uložíte jako UTC, měli byste jej také dát svému Javascriptovému klientovi jako UTC. I když říkáte, že máte "nějaký java skript, který mě posune uživatele proti UTC" - to bude záviset na přesném okamžiku v čase. Například, když jsem ve Velké Británii, můj offset je někdy 0 a někdy +1 hodina. Pokud předáte UTC zpět klientovi, může to zjistit místní čas z tohoto času UTC. Váš server nemůže, pokud nezískáte přesné reprezentace časového pásma od klienta k serveru, což je obecně ošemetná věc.
Opět platí, že samotný C# zde není relevantní. Není jasné, kterou část frameworku .NET máte na mysli - TimeZone
? TimeZoneInfo
? DateTime
? TimeZoneInfo
obsahuje historická data, ale pouze pokud používáte verzi operačního systému, která to podporuje.
No, pokud vás to bude pravděpodobně zajímat. Nemá tolik historických dat jako TZDB a má velmi zvláštní zastoupení pro Rusko a Namibii, ale obecně má představu o změně pravidel.