sql >> Base de Datos >  >> NoSQL >> MongoDB

Tratar cómo MongoDB almacena DateTime cuando se usa con Service Locator Pattern

¿Por qué no está almacenando UTC en la base de datos en primer lugar? En la mayoría de los casos, DateTime debe almacenarse en UTC, porque generalmente se refiere a un punto en el tiempo. Esto es cierto para cualquier cosa que se refiera al tiempo en un sentido físico, y cualquier cosa que asuma que el tiempo es monótono, creciente y único, ninguno de los cuales es cierto para la mayoría de los tiempos locales.

Ocasionalmente, tiene sentido usar la hora local:supongamos que un autobús sale todos los días a las 9 am. Esto significa que pasan 24 horas entre dos eventos consecutivos. Sin embargo, si la zona horaria tiene un horario de verano, será un intervalo de 23 h, respectivamente 25 h una vez al año.

Sin embargo, si necesita manejar este tipo de datos, un simple DateTime no hace el truco; Las reglas de horario de verano pueden cambiar, las zonas horarias pueden cambiar, etc. En C#, las reglas de horario de verano que se aplicarán son las que están actualmente válida, incluso si la fecha es 'histórica'. La aritmética de fechas con fechas históricas puede causar estragos. Si realmente necesita hacer frente a esto, al menos, debe almacenar cuál zona horaria en la que se encuentra la hora (no solo el desplazamiento, o incluso solo un isLocal bandera).

Almacenar información textual en la base de datos que se pueda almacenar en binario no me parece muy elegante, tampoco cambiar el valor en alguna capa intermedia. El primero es ineficiente y sufre de las peculiaridades antes mencionadas de la hora local, esta última solo tiene el 2do problema.

Por cierto, para lograr esto último, puede decorar la propiedad con [BsonDateTimeOptions(Kind=DateTimeKind.Local)] , que hará la conversión por usted, pero tiene los mismos problemas, por supuesto.