Queremos comenzar a recopilar zonas horarias para cada una de nuestras direcciones en la base de datos. ¿Cuál es la mejor práctica para almacenar las zonas horarias? ¿Cómo haría para adquirir zonas horarias para los registros de direcciones existentes?
Estoy usando el servidor Microsoft SQL, .net mvc, C #. Cualquier sugerencia sería muy apreciada.
database
database-design
time
Rodney
fuente
fuente
Respuestas:
Desea almacenar algo que no cambia todo el tiempo (o dos veces al año). La base de datos de zona horaria https://en.wikipedia.org/wiki/List_of_tz_database_time_zones es exactamente lo correcto. Entonces solo guardas dos letras.
Desde esta base de datos puede consultar la diferencia horaria y cuándo está activo el horario de verano. No es solo el desplazamiento de tiempo, también le brinda un área, por lo que muchos lugares en la misma latitud tendrán códigos diferentes y pueden cambiar individualmente sus reglas de zona horaria, y su software podrá manejarlo.
El único momento en que necesita hacer cambios en su base de datos es cuando una ubicación cambia a qué zona horaria pertenece, lo cual sería muy raro.
fuente
La mejor práctica absoluta sería utilizar una base de datos que admita el
TIMESTAMP WITH TIMEZONE
tipo de datos definido por SQL99.SQL Server tiene un tipo llamado
datetimeoffset
que hace todo lo queTIMESTAMP WITH TIMEZONE
puede hacer excepto almacenar la zona horaria real. Todo lo que puede hacer es almacenar un desplazamiento desde UTC (por ejemplo,2013-05-04 12:34:56 -5:00
), lo que significa que tendrá que determinarlo antes del almacenamiento en función de la zona horaria.fuente
Suponiendo que está utilizando .Net Framework 4.0 o superior, TimeZoneInfo es lo que necesita.
Almacene todos los valores de fecha en la base de datos en formato UTC. Utilice el valor de ID o el resultado de ToSerializedString () para cada cliente para crear un objeto TimeZoneInfo para convertir las fechas almacenadas al formato local para su visualización.
fuente
Ha dicho que desea almacenar una zona horaria para cada dirección en su base de datos, pero no ha dicho qué quiere hacer con ella. Almacenar algo en un DB rara vez es un fin en sí mismo.
En cualquier caso, trataría de utilizar la base de datos TZ , también conocida como la base de datos Olsen, ya sea directamente o mediante el uso de algún software estándar que integre TZ. Puede almacenar una zona horaria simplemente como una cadena para referirse a una de las entradas de TZ DB , por ejemplo, 'África / Kampala' o 'Europa / París'.
fuente