2012-09-15 11 views
7

Ho l'app MonoTouch che elabora i dati da un webservice. Questi dati contengono informazioni sulla data che sono specifiche per un fuso orario. Il fuso orario è UTC +12, che è per la Nuova Zelanda.Ottieni DateTime.Now per un Timezone specifico indipendentemente dal fuso orario del dispositivo?

La mia app visualizza questi dati in base all'ora corrente. Il problema è che quando l'app viene utilizzata in diversi Timezone, i dati non vengono visualizzati correttamente perché l'ora corrente sul dispositivo non è corretta.

Come è possibile ottenere l'ora corrente per UTC +12 indipendentemente dall'impostazione locale/fuso orario sul dispositivo?

Edit:

Ho provato il seguente codice sulla base delle risposte di seguito:

TimeZoneInfo.ConvertTime (DateTime.Now, TimeZoneInfo.FindSystemTimeZoneById("Pacific/Auckland")); 

Questo codice funziona bene sul mio computer ma quando l'eseguo in MonoTouch ottengo la seguente eccezione:

System.ArgumentException: Kind propery of dateTime is Local but the sourceTimeZone does not equal TimeZoneInfo.Local 
    at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo sourceTimeZone, System.TimeZoneInfo destinationTimeZone) [0x00018] in /Developer/MonoTouch/Source/mono/mcs/class/System.Core/System/TimeZoneInfo.cs:179 
    at System.TimeZoneInfo.ConvertTime (DateTime dateTime, System.TimeZoneInfo destinationTimeZone) [0x00000] in /Developer/MonoTouch/Source/mono/mcs/class/System.Core/System/TimeZoneInfo.cs:173 
+0

iniziare con DateTime.UtcNow? –

+0

@lanks: cosa è successo? Perché hai rimosso la tua risposta. Non è quello che volevi? –

+0

@Nickhil Agrawal Ci dispiace, ma dopo aver testato la tua risposta non ha funzionato. Ho aggiornato la mia domanda con il codice e l'eccezione. – startupsmith

risposta

3

Questo è un bug in MonoTouch.

La correzione verrà inclusa in una versione futura di MonoTouch (non so ancora quale sia).

In ogni caso è già disponibile a hotfix.

20

Utilizzare DateTime.Now. Questo ti darà la data e l'ora del sistema TimeZone. Ora convertire tale di volta in volta fuso orario desiderato come questo

var indianTime = TimeZoneInfo.ConvertTime (DateTime.Now, 
       TimeZoneInfo.FindSystemTimeZoneById("India Standard Time")); 

Per ottenere l'elenco dei TimeZone eseguire questo metodo

ReadOnlyCollection<TimeZoneInfo> zones = TimeZoneInfo.GetSystemTimeZones(); 
Console.WriteLine("The local system has the following {0} time zones", zones.Count); 
foreach (TimeZoneInfo zone in zones) 
    Console.WriteLine(zone.Id); 
+3

Elenco dei fusi orari MSFT: https://msdn.microsoft.com/en-us/library/ms912391(v=winembedded.11).aspx – RJB

10

Si può fare come:

Datetime date = TimeZoneInfo.ConvertTime(utcDateTime, timeZone); 

semplicemente passare i parametri indicati .

Problemi correlati