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;
}
}
答案 0 :(得分:0)
MongoDB只存储UTC-Data。因此,要么你可以自己转换它,或者你可以告诉驱动程序你想要使用本地日期时间,驱动程序将为你做(转换为utc存储和返回阅读)。为此,您需要注册预定义的Serializer
BsonSerializer.RegisterSerializer(typeof(DateTime),
new DateTimeSerializer(DateTimeKind.Local));