Saltar al contenido

SQL Server: convertir el campo de fecha a UTC

Estate atento ya que en este tutorial hallarás el arreglo que buscas.

Solución:

No creo que el código anterior funcione. La razón es que depende de la diferencia entre la fecha actual en horario local y UTC. Por ejemplo, aquí en California ahora estamos en PDT (hora de verano del Pacífico); la diferencia entre esta hora y UTC es de 7 horas. El código provisto, si se ejecuta ahora, agregará 7 horas a cada fecha que se desee convertir. Pero si se convierte una fecha histórica almacenada, o una fecha en el futuro, y esa fecha no es durante el horario de verano, aún agregará 7, cuando el desplazamiento correcto es 8. En pocas palabras: no puede convertir la fecha/hora correctamente entre zonas horarias (incluido UTC, que no obedece al horario de verano) con sólo mirar la fecha actual. Debe tener en cuenta la fecha en sí que está convirtiendo, en cuanto a si el horario de verano estaba vigente en esa fecha. Además, las fechas en las que se cambia el horario diurno y estándar también han cambiado (¡George Bush cambió las fechas durante su administración para los EE. UU.!). En otras palabras, cualquier solución que incluso haga referencia a getdate() o getutcdate() no funciona. Debe analizar la fecha real que se va a convertir.

Con SQL Server 2016, ahora hay soporte integrado para zonas horarias con el AT TIME ZONE declaración. Puede encadenar estos para hacer conversiones:

SELECT YourOriginalDateTime AT TIME ZONE 'Pacific Standard Time' AT TIME ZONE 'UTC'

O bien, esto también funcionaría:

SELECT SWITCHOFFSET(YourOriginalDateTime AT TIME ZONE 'Pacific Standard Time', '+00:00')

Cualquiera de estos interpretará la entrada en hora del Pacífico, tendrá en cuenta correctamente si el horario de verano está en vigor o no y luego lo convertirá a UTC. El resultado será un datetimeoffset con desplazamiento cero.

Más ejemplos en el anuncio de CTP.

Si todos son locales para usted, aquí está la compensación:

SELECT GETDATE() AS CurrentTime, GETUTCDATE() AS UTCTime

y debería poder actualizar todos los datos usando:

UPDATE SomeTable
   SET DateTimeStamp = DATEADD(hh, DATEDIFF(hh, GETDATE(), GETUTCDATE()), DateTimeStamp)

¿Funcionaría eso, o me estoy perdiendo otro ángulo de este problema?

Acuérdate de que tienes la capacidad de aclarar si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *