2013-01-10 14 views
6

C# offre un modo per ottenere la data corrente tramite DateTime.Now. Ma il problema è che il mio server è negli Stati Uniti e ottengo gli Stati Uniti quando uso DateTime.NowC# e ora locale locale per diversi paesi

C'è un modo per ottenere l'ora locale corrente per un determinato paese in C# come i miei utenti provengono da tutto il mondo? (Ho localizzazione di ogni utente, quindi sono sicuro)

Ho visto un modo using Time Zone ma poi devo mantenere il fuso orario rispetto al paese di riferimento.

Ho cercato e la maggior parte della domanda qui riguarda la conversione dell'ora UTC in ora locale e viceversa. Spero che qualcuno sia in grado di illuminarmi.

+1

io non offrire una soluzione, ma leggere il blog [Cosa c'è di sbagliato con datetime comunque] (http: // noda-time.blogspot.in/2011/08/what-wrong-with-datetime-anyway.html) per i problemi relativi a DateTime/DateTimeOffet. . – Tilak

+0

[Ottieni fuso orario per Paese e regione] (http://stackoverflow.com/q/7977736) –

+1

Nota che alcuni paesi si estendono su diversi fusi orari. Quindi conoscere solo il paese potrebbe non essere sufficiente. Meglio conoscere direttamente il fuso orario dell'utente dal suo computer. – Guillaume

risposta

4

Risparmia tempo sul tuo server utilizzando l'ora UTC (DateTime.UtcNow) e, in base al fuso orario degli utenti, cambierai questo tempo di utc. Mai risparmiare l'ora locale nel db

+0

Hai letto [Cosa c'è di sbagliato con datetime comunque] (http://noda-time.blogspot.in/2011/08/what-wrong-with-datetime-anyway.html). DateTime + fuso orario locale + Day Il salvataggio della luce non è così semplice da risolvere come appare – Tilak

+0

vedi questo post http://stackoverflow.com/questions/8614323/convert-server-utc-time-to-client-local-time –

+0

Is è uguale a DateTime.Now.ToUniversalTime()? –

2

Basta dare un'occhiata alla classe TimeZoneInfo. Dovresti essere in grado di convertire da e verso il server in un determinato momento, mantenendo l'ora legale (ora legale).

DateTimeOffset newTime = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("AppTimeZone")); 

È inoltre possibile trovare un'implementazione open source di fuso da uno della Grande Jon Skeet Noda Time