2012-09-15 17 views
7

Tengo la aplicación MonoTouch que procesa los datos de un servicio web. Estos datos contienen información de fecha que es específica de una zona horaria. La zona horaria es UTC +12 que es para Nueva Zelanda.Obtener DateTime.Now para un TimeZone específico independientemente de la zona horaria del dispositivo?

Mi aplicación muestra estos datos en función de la hora actual. El problema con esto es que cuando la aplicación se usa en diferentes TimeZones, los datos no se muestran correctamente porque la hora actual en el dispositivo es incorrecta.

¿Cómo puedo obtener la fecha y hora actuales para UTC +12 independientemente de la configuración de configuración regional/hora en el dispositivo?

Editar:

He probado el siguiente código basado en las respuestas a continuación:

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

Este código funciona bien en mi equipo, sin embargo cuando lo ejecuto en MonoTouch consigo la siguiente excepción:

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

empezar con DateTime.UtcNow? –

+0

@lanks: ¿Qué pasó? ¿Por qué no retiró su respuesta? ¿No es lo que deseas? –

+0

@Nickhil Agrawal Lo sentimos, pero después de probar su respuesta, no funcionó. He actualizado mi pregunta con el código y la excepción. – startupsmith

Respuesta

3

Esto es bug en MonoTouch.

La corrección se incluirá en una versión futura de MonoTouch (aún no sé exactamente qué).

En cualquier caso, ya está disponible a hotfix.

20

Use DateTime.Now. Esto le dará la fecha y hora del sistema TimeZone. Ahora convertir ese tiempo en tiempo zona horaria deseada como esto

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

Para obtener la lista de zona horaria ejecutar este método

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

Lista de zonas horarias de MSFT: https://msdn.microsoft.com/en-us/library/ms912391(v=winembedded.11).aspx – RJB

10

Puede hacerlo como:

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

sólo tiene que pasar los parámetros dados .

Cuestiones relacionadas