Pregunta

Deseo almacenar un valor a c # DateTimeOffset en una base de datos SQL Server 2005.

Sql 2008 tiene esto como un tipo incorporado, pero SQL Server 2005 no.

La estructura DateTimeOffset tiene un valor DateTime que almaceno como DateTime, una propiedad Offset (de tipo TimeSpan). Dado que esta es la zona horaria relativa a UTC, presumiblemente es habitualmente en un número entero de horas o media hora.

¿Sugerencias sobre la mejor manera de almacenar esto en una base de datos SQL Server 2005?

¿Fue útil?

Solución

No es una buena idea suponer que un desplazamiento es una cantidad de horas o media hora; ciertamente hay zonas horarias de un cuarto de hora alrededor.

Usar milisegundos para el desplazamiento es probablemente el más flexible, pero diría que los minutos son mucho más fáciles de leer. Si alguna vez vas a mirar el "crudo" datos en la base de datos, es más fácil entender el valor 60 = 1 hora que 3600000. No puedo imaginar que realmente necesites fracciones de minutos como compensación.

Otros consejos

Normalice todos los DateTimeOffsets a un desplazamiento común, preferiblemente UTC. Luego, simplemente almacene DateTime como de costumbre. Tras la extracción, restaure el desplazamiento, que debería ser una constante. Esto no retiene el desplazamiento de origen, pero el desplazamiento es ambiguo a una zona horaria de todos modos.

Si realmente necesita saber el origen de fecha / hora, entonces necesitaría almacenar información de zona horaria. Esto se debe a que un desplazamiento simple no puede representar inequívocamente el origen de un tiempo. Consulte la documentación de MSDN (algo confusa) sobre Elegir entre DateTime, DateTimeOffset y TimeZoneInfo .

almacena la fecha y hora como fecha y el desplazamiento como milisegundos (bigint)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top