zulu significa reloj que mexico horarios horario hora cuál convertir convertidor colombia argentina analogico actual c# .net datetime utc

c# - significa - utc time



Convertir la hora UTC/GMT a la hora local (11)

En respuesta a la sugerencia de Dana:

El ejemplo de código ahora se ve como:

string date = "Web service date"..ToString("R", ci); DateTime convertedDate = DateTime.Parse(date); DateTime dt = TimeZone.CurrentTimeZone.ToLocalTime(convertedDate);

La fecha original era 20/08/08; el tipo era UTC.

Tanto "convertDate" como "dt" son iguales:

21/08/08 10:00:26; el tipo era local

Estamos desarrollando una aplicación de C # para un cliente de servicio web. Esto se ejecutará en PC con Windows XP.

Uno de los campos devueltos por el servicio web es un campo DateTime. El servidor devuelve un campo en formato GMT, es decir, con una "Z" al final.

Sin embargo, encontramos que .NET parece hacer algún tipo de conversión implícita y el tiempo siempre fue de 12 horas.

El siguiente ejemplo de código resuelve esto en cierta medida en que la diferencia de 12 horas se ha ido pero no tiene en cuenta el horario de verano.

CultureInfo ci = new CultureInfo("en-NZ"); string date = "Web service date".ToString("R", ci); DateTime convertedDate = DateTime.Parse(date);

Según el sitio de esta fecha :

Compensación UTC / GMT

Zona horaria estándar: UTC / GMT +12 horas.
Horario de verano: +1 hora
Desplazamiento de la zona horaria actual: UTC / GMT +13 horas

¿Cómo nos ajustamos a la hora extra? ¿Se puede hacer esto de manera programática o es una configuración de PC?


Me encontré con esta pregunta porque tenía un problema con las fechas UTC que recibías a través de la API de Twitter (campo created_at en un estado); Necesito convertirlos a DateTime. Ninguna de las respuestas / muestras de código en las respuestas en esta página fue suficiente para evitar que recibiera un error de "Cadena no reconocida como una Fecha y hora válida" (pero es lo más cercano que tengo a encontrar la respuesta correcta en SO)

Publicando este enlace aquí en caso de que esto ayude a alguien más, la respuesta que necesitaba se encontró en esta publicación del blog: http://www.wduffy.co.uk/blog/parsing-dates-when-aspnets-datetimeparse-doesnt-work/ - básicamente use DateTime.ParseExact con una cadena de formato en lugar de DateTime.Parse


Me gustaría utilizar la clase System.TimeZoneInfo si está en .NET 3.5. Consulte http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx . Esto debería tener en cuenta los cambios de horario de verano correctamente.

// Coordinated Universal Time string from // DateTime.Now.ToUniversalTime().ToString("u"); string date = "2009-02-25 16:13:00Z"; // Local .NET timeZone. DateTime localDateTime = DateTime.Parse(date); DateTime utcDateTime = localDateTime.ToUniversalTime(); // ID from: // "HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/Time Zone" // See http://msdn.microsoft.com/en-us/library/system.timezoneinfo.id.aspx string nzTimeZoneKey = "New Zealand Standard Time"; TimeZoneInfo nzTimeZone = TimeZoneInfo.FindSystemTimeZoneById(nzTimeZoneKey); DateTime nzDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, nzTimeZone);


No olvide que si ya tiene un objeto DateTime y no está seguro de si es UTC o Local, es fácil usar los métodos directamente en el objeto:

DateTime convertedDate = DateTime.Parse(date); DateTime localDate = convertedDate.ToLocalTime();

¿Cómo nos ajustamos a la hora extra?

A menos que se especifique .net utilizará la configuración local de la PC. Tendría una lectura de: http://msdn.microsoft.com/en-us/library/system.globalization.daylighttime.aspx

Por el aspecto del código podría verse algo como:

DaylightTime daylight = TimeZone.CurrentTimeZone.GetDaylightChanges( year );

Y como se mencionó anteriormente, verifique en qué zona horaria está configurando su servidor. Hay artículos en la red sobre cómo afectar de manera segura los cambios en IIS.


Para cadenas como el 2012-09-19 01:27:30.000 , DateTime.Parse no puede decir de qué zona horaria están la fecha y la hora.

DateTime tiene una propiedad Kind , que puede tener una de las tres opciones de zona horaria:

  • No especificado
  • Local
  • UTC

NOTA Si desea representar una fecha / hora que no sea UTC o su zona horaria local, debe usar DateTimeOffset .

Así que para el código en su pregunta:

DateTime convertedDate = DateTime.Parse(dateStr); var kind = convertedDate.Kind; // will equal DateTimeKind.Unspecified

Usted dice que sabe de qué tipo es, así que dígalo.

DateTime convertedDate = DateTime.SpecifyKind( DateTime.Parse(dateStr), DateTimeKind.Utc); var kind = convertedDate.Kind; // will equal DateTimeKind.Utc

Ahora, una vez que el sistema sabe que está en la hora UTC, puedes llamar a ToLocalTime :

DateTime dt = convertedDate.ToLocalTime();

Esto le dará el resultado que necesita.


Sé que esta es una pregunta antigua, pero me encontré con una situación similar, y quería compartir lo que había encontrado para futuros buscadores, posiblemente incluyéndome a mí mismo :).

DateTime.Parse() puede ser complicado; consulte here por ejemplo.

Si el DateTime proviene de un servicio web o de otra fuente con un formato conocido, es posible que desee considerar algo como

DateTime.ParseExact(dateString, "MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal)

o mejor,

DateTime.TryParseExact(...)

La bandera de AssumeUniversal le dice al analizador que la fecha / hora ya es UTC; la combinación de AssumeUniversal y AssumeUniversal le dice que no convierta el resultado a una hora "local", lo que intentará hacer de forma predeterminada. (De todos modos, personalmente trato de tratar exclusivamente con UTC en la (s) capa (s) de negocio / aplicación / servicio. Pero eludir la conversión a la hora local también acelera las cosas, en un 50% o más en mis pruebas, consulte a continuación.)

Esto es lo que estábamos haciendo antes:

DateTime.Parse(dateString, new CultureInfo("en-US"))

Habíamos perfilado la aplicación y descubrimos que DateTime.Parse representaba un porcentaje significativo del uso de la CPU. (Por cierto, el constructor CultureInfo no contribuyó significativamente al uso de la CPU).

Así que configuro una aplicación de consola para analizar una cadena de fecha / hora 10000 veces de varias maneras. Línea de fondo:
Parse() 10 sec
ParseExact() (convertir a local) 20-45 ms
ParseExact() (no se convierte a local) 10-15 ms
... y sí, los resultados de Parse() están en segundos , mientras que los otros están en milisegundos .


Simplemente me gustaría añadir una nota general de precaución.

Si todo lo que está haciendo es obtener la hora actual del reloj interno de la computadora para poner una fecha / hora en la pantalla o un informe, entonces todo está bien. Pero si está guardando la información de fecha / hora para referencia futura o si está calculando la fecha / hora, ¡tenga cuidado!

Supongamos que determina que un crucero llegó a Honolulu el 20 de diciembre de 2007 a las 15:00 UTC. Y quieres saber qué hora local era.
1. Probablemente hay al menos tres ''locales'' involucrados. Local puede significar Honolulu, o puede significar dónde se encuentra su computadora, o puede significar la ubicación donde se encuentra su cliente.
2. Si usa las funciones integradas para hacer la conversión, probablemente estará mal. Esto se debe a que el horario de verano está (probablemente) actualmente vigente en su computadora, pero NO estuvo vigente en diciembre. Pero Windows no sabe esto ... todo lo que tiene es una marca para determinar si el horario de verano está actualmente vigente. Y si está actualmente vigente, entonces felizmente agregará una hora incluso a una fecha en diciembre.
3. El horario de verano se implementa de manera diferente (o no lo hace) en varias subdivisiones políticas. No piense que solo porque su país cambie en una fecha específica, los otros países también lo harán.


Tuve el problema de estar en un conjunto de datos que se enviaba a través del cable (servicio web al cliente) que cambiaría automáticamente porque el campo DateType de DataColumn estaba configurado como local. Asegúrese de verificar qué es el DateType si está insertando DataSets.

Si no desea que cambie, configúrelo en Sin especificar


DateTime objetos DateTime tienen el Kind de Unspecified de forma predeterminada, que a los efectos de ToLocalTime se supone que es UTC .

Para obtener la hora local de un objeto DateTime Unspecified , por lo tanto, solo necesita hacer esto:

convertedDate.ToLocalTime();

El paso de cambiar el Kind de DateTime de No Unspecified a UTC es necesario. Se supone que lo Unspecified es UTC para ToLocalTime : msdn.microsoft.com/en-us/library/…


@TimeZoneInfo.ConvertTimeFromUtc(timeUtc, TimeZoneInfo.Local)


TimeZone.CurrentTimeZone.ToLocalTime(date);