TimeZoneInfo
gør, ja. (Det er en del af .NET frameworket, ikke en del af C# - C# er bare det sprog, du tilfældigvis bruger.) Jeg tror dog ikke, at det er det, du virkelig ønsker at gøre.
Hvorfor gemmer du DateTime
i serverens tidszone alligevel? Det ville i de fleste tilfælde være mere fornuftigt at gemme det i UTC. Bortset fra alt andet, hvis din server er i en tidszone, der observerer sommertid, vil du ende med tvetydighed i en time om året, når uret går tilbage. (Samme lokale tid forekommer to gange.)
Når du har gemt det som UTC, bør du også give det til din Javascript-klient som UTC. Mens du siger, at du har "noget java-script, der vil få mig brugerne til at kompensere for UTC" - det vil afhænge af det nøjagtige øjeblik i tiden. For eksempel, da jeg er i Storbritannien, er min offset nogle gange 0 og nogle gange +1 time. Hvis du sender UTC tilbage til klienten, kan det beregne den lokale tid fra denne UTC-tid. Din server kan ikke, medmindre du kan få en nøjagtig repræsentation af tidszonen fra klienten til serveren, hvilket generelt er en vanskelig ting at gøre.
Igen, C# i sig selv er ikke relevant her. Det er ikke klart, hvilken del af .NET frameworket du mener - TimeZone
? TimeZoneInfo
? DateTime
? TimeZoneInfo
har historiske data, men kun hvis du er på en version af operativsystemet, der understøtter det.
Nå, så vidt du sandsynligvis er ligeglad. Det har ikke så mange historiske data som TZDB, og det har nogle meget mærkelige repræsentationer for Rusland og Namibia, men det har generelt ideen om, at reglerne ændres.