TimeZoneInfo
sì, sì. (Fa parte del framework .NET, non di C# - C# è solo il linguaggio che stai usando.) Tuttavia, non penso che sia quello che vuoi davvero fare.
Perché stai memorizzando il DateTime
nei server fuso orario comunque? Sarebbe più sensato memorizzarlo in UTC, nella maggior parte dei casi. A parte qualsiasi altra cosa, se il tuo server si trova in un fuso orario che osserva l'ora legale, finirai con l'ambiguità per un'ora all'anno, quando l'orologio torna indietro. (La stessa ora locale ricorre due volte.)
Dopo averlo archiviato come UTC, dovresti darlo anche al tuo client Javascript come UTC. Mentre dici di avere "uno script java che mi farà spostare gli utenti dall'UTC", ciò dipenderà dall'istante esatto nel tempo. Ad esempio, poiché mi trovo nel Regno Unito, il mio offset è a volte 0 e talvolta +1 ora. Se restituisci l'UTC al client, è possibile calcolare l'ora locale da quell'ora UTC. Il tuo server non può, a meno che tu non riesca a ottenere un preciso rappresentazione del fuso orario dal client al server, che è generalmente una cosa difficile da fare.
Ancora una volta, C# stesso non è rilevante qui. Non è chiaro quale parte del framework .NET intendi:TimeZone
? TimeZoneInfo
? DateTime
? TimeZoneInfo
ha dati storici, ma solo se utilizzi una versione del sistema operativo che lo supporta.
Beh, per quanto ti interessa. Non ha tanti dati storici come TZDB, e ha alcune rappresentazioni molto strane per Russia e Namibia, ma generalmente ha l'idea che le regole cambino.