TimeZoneInfo
прави, да. (Това е част от .NET framework, а не част от C# - C# е просто езикът, който случайно използвате.) Не мисля обаче, че това е, което наистина искате да правите.
Защо съхранявате DateTime
в сървъра все пак часовата зона? Би било по-разумно да го съхранявате в UTC в повечето случаи. Освен всичко друго, ако вашият сървър е в часова зона, която спазва лятното часово време, ще получите неяснота за един час на година, когато часовникът се върне назад. (Едно и също местно време се среща два пъти.)
След като го съхраните като UTC, трябва да го дадете и на вашия Javascript клиент като UTC. Въпреки че казвате, че имате "някакъв java скрипт, който ще ми даде изместването на потребителите от UTC" - това ще зависи от точния момент във времето. Например, тъй като съм в Обединеното кралство, отместването ми понякога е 0, а понякога +1 час. Ако предадете UTC обратно на клиента, това може да изчисли местното време от това UTC време. Вашият сървър не може, освен ако не можете да получите точен представяне на часовата зона от клиента към сървъра, което обикновено е сложно нещо.
Отново самият C# не е от значение тук. Не е ясно коя част от .NET framework имате предвид - TimeZone
? TimeZoneInfo
? DateTime
? TimeZoneInfo
има исторически данни, но само ако използвате версия на операционната система, която го поддържа.
Е, доколкото ви е вероятно да ви пука. Той няма толкова исторически данни като TZDB и има някои много странни представяния за Русия и Намибия, но като цяло има идеята за промяна на правилата.