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.
Marque esta pregunta: http://stackoverflow.com/questions/179940/c-sharp-convert-utc-gmt-time-to-local-time – Nayan
Ha intentado algunas estrategias, como 'DateTime.Parse (object. Data.ToShortDateString()). ToLocalTime() 'pero no ocurre nada ... – markzzz
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. –