avrei detto che si dovrebbe usare UTC per i calcoli di periodi di tempo, in modo da evitare problemi di ora legale e quindi utilizzare LocalTime solo per la visualizzazione.
DateTime.ToLocalTime per UTC a qualunque sia il fuso orario locale e quindi DateTime.ToUniversalTime per la conversione da ora locale a UTC.
Edit dopo il commento 1
faccio a prenderlo allora che siete dopo la visualizzazione di un fuso orario diverso da quello del server?
Se si stanno utilizzando pagine Web per accedere al server, utilizzare HttpRequest.UserLanguages per creare un oggetto CultureInfo e utilizzarlo per analizzare l'oggetto DateTime. Cerca qui una spiegazione completa: Microsoft link on displaying local user time for web pages.
Se si utilizza l'architettura client-server, se la chiamata LocalTime si trova sul lato client, verrà visualizzato LocalTime per il client. Quindi lo converti in UTC per inviarlo al tuo server.
In entrambi i casi il server non ha bisogno di sapere dove si trova il client, quindi se ci sono più client in più fusi orari, tutti i calcoli corrisponderanno. Ti permetterà anche di mostrare gli orari in qualsiasi fuso orario che desideri usando diversi oggetti Cultura.
Edit 2 copiato il mio secondo commento
È possibile ottenere dati in tempo in formato UTC dal server. Quindi puoi convertirlo usando DateTime.ToLocalTime o DateTime.ToUniversalTime come richiesto. Se si includono anche le date e si ha bisogno di gestire i formati MM/gg/aaaa europei e gg/MM/aaaa statunitensi, è possibile utilizzare la classe CultureInfo per analizzare di conseguenza il valore DateTime. Sembra più lavoro di quello che si ha in questo momento, ma significherebbe che se si sposta nuovamente il server, non è necessario ricodificare la gestione di DateTime.
Un nuovo punto
Un altro punto da guardare è la sincronizzazione dell'orologio tra il server ei client che utilizzano NTP (Network Time Protocol) o SNTP (Simple Network Time Protocol) se è abbastanza preciso. Non so quale sistema operativo si sta utilizzando, ma questo è utilizzato dai servizi orari di Windows Server per sincronizzare le reti.
Ciao Jon, grazie per la tua risposta. Cosa suggeriresti come soluzione migliore per questi 2? devo creare un fuso orario personalizzato o utilizzare TimeZoneInfo.FindSystemTimeZoneById ("Eastern Standard Time"); considerando che si prenderà cura dell'ora legale. E come mi prendo cura di questo problema nelle procedure memorizzate che utilizzano il metodo getdate() e prendono l'ora IST? – Shetty
Non conosco le stored procedure, per essere onesti - se possibile, passare UTC in loro e fargli capire UTC. Per quanto riguarda l'eventuale utilizzo di un fuso orario personalizzato di Eastern Standard Time, dipende dal fatto se si desidera un fuso orario che è * sempre * 4 ore indietro rispetto all'ora UTC o uno che corrisponde all'ora standard orientale. All'inizio hai dichiarato che dovevi utilizzare EDT "per tutti gli scopi" - ti suggerisco di controllare se * davvero * hai bisogno di EDT, o se hai bisogno di Eastern Standard Time. –
Ok Jon. Mi è stato chiesto di utilizzare l'ora della città * di Boston * come ora standard per tutti gli scopi temporali, che rientra in EDT. Non ero molto consapevole del risparmio di luce diurna. Volevo che la mia applicazione prendesse questa volta anche se è in esecuzione nel server IST. In precedenza era in un altro server che era in esecuzione nel fuso orario EDT e non ho avuto tali problemi. – Shetty