Almacenamiento de DateTime (UTC) contra el almacenamiento de DateTimeOffset

Normalmente tengo un "interceptor" que justo antes de leer / escribir desde / hasta la database realiza la conversión de date y hora (de UTC a localtime, y de localtime a utc), así puedo usar DateTime.Now (derivaciones y comparaciones) en todo el sistema sin Preocuparse por los husos horarios.

En cuanto a la serialization y el traslado de datos entre computadoras, no hay necesidad de molestarse, ya que la date y hora es siempre UTC.

¿Debo continuar almacenando mis dates (SQL 2008 – datetime) en formatting UTC o en su lugar debería almacenarlo usando DateTimeOffset (SQL 2008 – datetimeoffset)?

Las dates UTC en la database (tipo de date y hora) han estado funcionando y se conocen desde hace tanto time, ¿por qué cambiarlas? ¿Cuáles son las ventajas?

Ya he analizado artículos como este , pero no estoy 100% convencido. ¿Alguna idea?

Hay una gran diferencia, donde no puede usar UTC solo.

  • Si tienes un escenario como este

    • Un server y varios clientes (todos geográficamente en diferentes zonas horarias )
    • Los clientes crean algunos datos con información de date y hora
    • Los clientes lo almacenan todo en el server central
  • Entonces:

    • datetimeoffset almacena la hora UTC y también se compensa con la hora local del cliente
    • todos los clientes conocen la hora UTC de todos los datos y también la hora local en el lugar donde se originó la información
  • Pero:

    • UTC datetime almacena solo el horario de UTC , por lo que no tiene información sobre la hora local en la location del cliente donde se originaron los datos
    • Otros clientes no conocen la hora local del lugar, de donde proviene la información de date y hora
    • Otros clientes solo pueden calcular su hora local desde la database (usando la hora UTC), no la hora local del cliente, donde se originaron los datos.

Ejemplo simple es el sistema de reserva de boleto de vuelo … El boleto de vuelo debe contener 2 veces: – hora de "despegue" (en la zona horaria de la ciudad "De") – hora de "aterrizaje" (en la zona horaria de la ciudad de "Destino")

Tiene toda la razón al usar UTC para todos los times históricos (es decir, grabar events ocurridos). Siempre es posible pasar de UTC a hora local pero no siempre a la inversa.

Cuándo usar la hora local? Responde esta pregunta:

Si el gobierno repentinamente decide cambiar el horario de verano, ¿le gustaría que estos datos cambien con él?

Solo almacene la hora local si la respuesta es "sí". Obviamente, eso solo será para dates futuras, y generalmente solo para dates que afectan a las personas de alguna manera.

¿Por qué almacenar una zona horaria / desplazamiento?

En primer lugar, si desea registrar el desplazamiento para el usuario que realizó la acción, probablemente sea mejor que lo haga, es decir, al iniciar session, registre la location y la zona horaria de ese usuario.

En segundo lugar, si desea convertir para visualizar, necesita tener una tabla de todas las transiciones de compensación de time local para esa zona horaria, simplemente sabiendo que la compensación actual no es suficiente, porque si está mostrando una date / hora de hace seis meses, la compensación sé diferente.

A DATETIMEOFFSET le permite almacenar la hora local y la hora UTC en un campo.

Esto permite un informe muy simple y eficiente en time local o UTC sin la necesidad de procesar los datos para su visualización de ninguna manera.

Estos son los dos requisitos más comunes: hora local para informes locales y hora UTC para informes grupales.

La hora local se almacena en la parte DATETIME del DATETIMEOFFSET y la OFFSET de UTC se almacena en la parte OFFSET, por lo que la conversión es simple y, dado que no requiere conocimiento de la zona horaria de la que provienen los datos, todo se puede hacer a nivel de database. .

Si no necesita times de milisegundos, por ejemplo, solo minutos o segundos, puede usar DATETIMEOFFSET (0). El campo DATETIMEOFFSET solo requerirá 8 bytes de almacenamiento, lo mismo que DATETIME.

El uso de DATETIMEOFFSET en lugar de UTC DATETIME por lo tanto brinda más flexibilidad, eficiencia y simplicidad para los informes.

    Intereting Posts