当我通过C#驱动程序

时间:2016-01-30 12:57:25

标签: c# mongodb datetime mongodb-.net-driver

MongoDb:3.2 x64 C#驱动程序:官方C#驱动程序2.2

在我编写了一个TestClass实例之后,然后检索它。我发现字段“DataTime”已更改为UTC DateTime。

当然我知道c#驱动程序用UTC格式写DateTime,但它是自动将它转换为UTC并且当我从mongo中检索它时什么也不做。

我使用“samus”驱动程序,然后在写入mongo并将其转换为Local DateTime时将DateTime转换为UTC格式。

以下是测试代码:

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;

using MongoDB;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Driver;

namespace Test
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            var client = new MongoClient("mongodb://root:root@127.0.0.1");
            var db = client.GetDatabase("Test");
            var col = db.GetCollection<TestClass>("TestClass");

            var data = new TestClass(DateTime.Now.ToString());
            col.InsertOne(data);

            var find = Builders<TestClass>.Filter.Eq("_id", data.DataTime);
            var fo = new FindOptions<TestClass>();
            fo.Limit = 1;
            var t = col.FindSync(find, fo);
            var data_ret = t.ToList()[0];

            Assert.AreEqual(data.Text, data_ret.Text);
            Assert.AreEqual(data.DataTime, data_ret.DataTime);            
        }
    }

    public class TestClass
    {
        public TestClass()
        {
        }

        public TestClass(string arg_strText)
        {
            DataTime = DateTime.Parse(DateTime.Now.ToString());
            Text = arg_strText;
        }   

        [BsonId]
        public DateTime DataTime;
        public string Text;
    }
}

1 个答案:

答案 0 :(得分:0)

MongoDB只存储UTC-Data。因此,要么你可以自己转换它,或者你可以告诉驱动程序你想要使用本地日期时间,驱动程序将为你做(转换为utc存储和返回阅读)。为此,您需要注册预定义的Serializer

BsonSerializer.RegisterSerializer(typeof(DateTime),
                         new DateTimeSerializer(DateTimeKind.Local));