Ho un'implementazione Mongo C# che memorizza datetime come UTC.Memorizzazione di Utc e data/ora locale in Mongo
MongoDB.Bson.Serialization.Options.DateTimeSerializationOptions options =
MongoDB.Bson.Serialization.Options.DateTimeSerializationOptions.UtcInstance;
var serializer =
new MongoDB.Bson.Serialization.Serializers.DateTimeSerializer(options);
MongoDB.Bson.Serialization.BsonSerializer.RegisterSerializer(
typeof(DateTime),
serializer);
Ho anche bisogno di memorizzare il fuso orario locale dell'utente insieme all'ora UTC. Per spiegare, ho due proprietà che va come
DateTime WorkItemToCompleteBy{get; set;}
[BsonDateTimeOptions(Kind = DateTimeKind.Unspecified)]
DateTime WorkItemToCompleteByLocal{get; set;}
mi piacerebbe memorizzare i tempi indiani/Altro australiani/americano/nella proprietà locale e il rispettivo valore UTC nell'altro. Poiché ho a che fare con dozzine di fusi orari, ho un codice che converte l'UTC nel fuso orario desiderato e lo memorizza nella proprietà WorkItemToCompleteByLocal. Vorrei che Mongo conservasse questo valore "così com'è" e me lo restituisse. Il problema è che Mongo lo memorizza sempre come ISODate e converte il valore nella versione di Utc. Per spiegare. Se UTC è 0730 ore ed io calcolare Brisbane Tempo di 1730Hours e impostarlo per WorkitemToCompleteByLocal, essi vengono salvati come
"WorkItemToCompleteBy" : ISODate("2013-06-05T07:30:00Z"),
"WorkItemToCompleteByLocal" : ISODate("2013-06-05T12:00:00Z"),
Mongo interpreta il tempo previsto come locali, server essendo in India e ripari a l'UTC equivalente di 1200 ore. Mentre recupera i valori indietro come 1730 (IST anche se) Elimina il mio scopo e mi impedisce di eseguire qualsiasi query basata su ora locale su Mongo. Sono senza idee. Qualsiasi aiuto è apprezzato per aiutare a memorizzare WorkItemToCompleteByLocal data 'As-Is' senza modifiche
Ho trovato un lavoro ingannando il sistema rifondendo il fuso orario "Locale" come un UTC idratando un nuovo DateTime (Local.Year, Local.Month ......., Kind.Utc) e poi usando quel valore. Ora, i dati vengono archiviati così come sono e la mia logica sa che la colonna locale memorizza il valore locale indipendentemente da ciò che dice il genere (si dice UTC a causa del lavoro adottato). Lo userò fino a trovare una risposta migliore. –
Ho aggiunto un articolo a JIRA di MongoDB su come gestire le ore locali, che si riferisce anche a questa voce SO (richiede un'iscrizione): https://jira.mongodb.org/browse/DOCS-4086 – akauppi
Vedere http: //stackoverflow.com/a/38934986/194717 – Tony