2011-12-09 46 views
7

tengo unas pocas cosas GMT + 0 Fecha:Cómo convertir la fecha UTC + 0 a la fecha PST?

2011-11-28T07:21:41.000Z 

y me gustaría, en C#, lo convierten en un PST fecha. ¿Cómo puedo hacerlo? Intentado con:

object.Data.ToLocalTime() 

pero no puedo obtener el valor correcto (que debe ser 2011-11-27)

EDITAR

También probamos (después suggesion en otro tema) esto:

DateTime convertedDate = DateTime.SpecifyKind(
    DateTime.Parse(object.Data.ToShortDateString()), 
    DateTimeKind.Utc);      

DateTime dt = convertedDate.ToLocalTime(); 
string dataVideo = dt.ToShortDateString(); 

pero la fecha aún 28/11/2011, 27/11/2011 no

+0

Marque esta pregunta: http://stackoverflow.com/questions/179940/c-sharp-convert-utc-gmt-time-to-local-time – Nayan

+0

Ha intentado algunas estrategias, como 'DateTime.Parse (object. Data.ToShortDateString()). ToLocalTime() 'pero no ocurre nada ... – markzzz

+0

No veo un modo de falla sino uno: verifique que su máquina esté realmente en la zona horaria PST. Documente la hora que recibe, no solo la fecha. –

Respuesta

11

he cambiado de reloj para utilizar UTC-08:00 Pacific Time.

DateTime timestamp = DateTime.Parse("2011-11-28T07:21:41.000Z"); 
Console.WriteLine("UTC: " + timestamp.ToUniversalTime()); 
Console.WriteLine("PST: " + timestamp.ToLocalTime()); 

de salida:

UTC: 28/11/2011 7:21:41 
PST: 27/11/2011 23:21:41 

Ejemplo con TimeZoneInfo

DateTime timestamp = DateTime.Parse("2011-11-28T07:21:41.000Z"); 
Console.WriteLine("UTC: " + timestamp.ToUniversalTime()); 
Console.WriteLine("GMT+1: " + timestamp.ToLocalTime()); 
Console.WriteLine("PST: " + TimeZoneInfo.ConvertTimeBySystemTimeZoneId(timestamp, "Pacific Standard Time")); 

de salida:

UTC: 28/11/2011 7:21:41 
GMT+1: 28/11/2011 8:21:41 
PST: 27/11/2011 23:21:41 
+0

Primero, no puedo soltar la Z (no voy a reemplazar una cadena en una Fecha, eso es horrible). En segundo lugar, no, no funciona: la fecha todavía es el 28/11/2011, que, en PST, es el 27/11/2011 (12 horas antes). – markzzz

+1

No importa, soltar la Z. He actualizado la respuesta. PST es UTC-08: 00 por lo que puedo ver, no UTC-12: 00? – Stijn

+0

: O! Pero necesito imprimir ese valor sin cambiar el reloj de mi computadora :) ¿Hay algún método para convertir cierta fecha en UTC (mi fecha) en PST? Sí, lo siento, es UTC-08: 00, UTC-12: 00 debe ser PDT ... – markzzz

1

Por un poco más de color

2011-11-28T07:21:41.000Z

Ésta es una ISO8601 Marca de tiempo, el Z al final significa UTC. Esto representa una instancia específica en el tiempo.

DateTime.Parse le devolverá una estructura de fecha y hora local, hay tres tipos de tipos de fecha y hora, UTC, Local y No especificado.

Si intenta mostrar esto, le mostrará este instante en la zona horaria actual de su computadora (estoy en el este, así que cuando lo imprimo obtengo 11/28/2011 2:21:41 AM).

Si quiero cambiar este DateTime Kind a UTC, yo podría hacer algo como

DateTime.Parse("2011-11-28T07:21:41.000Z").ToUniversalTime()

Impresión esto ahora (ya que es tipo es ahora UTC) consigo 11/28/2011 7:21:41 AM.

Tenga en cuenta que, aunque la hora se imprime de manera diferente, estos dos tiempos se refieren al mismo instante en el tiempo.

Para mostrar este instante en una zona horaria diferente, la forma más fácil de imo es la clase TimeZoneInfo (aunque no estoy seguro de que sea 100% precisa).

TimeZoneInfo.ConverTimeBySystemTimeZoneId(dateTime, "Pacific Standard Time").

Impresión ahora producirá el resultado deseado 11/27/2011 11:21:41 PM

Tenga en cuenta que Kind propiedad este retorno de DateTime es ahora Unspecified, lo que significa que no será capaz de transferir de nuevo a UTC, sin más información. Ya no tienes un instante específico en el tiempo, sino que tienes un tiempo no especificado ... sabemos que es el mismo instante que los anteriores solo en tiempo pacífico, pero la computadora ya no lo sabe. Tenga esto en cuenta si desea almacenar esta vez.

Cuestiones relacionadas