У меня есть следующий тест, который проходит:MongoDB C# водитель и ISODate
namespace MongoDateTest
{
[TestFixture]
public class DateTesting
{
public class TestEntity
{
public string Id { get; set; }
public string StringTest { get; set; }
public DateTime DateTest { get; set; }
}
[Test]
public void MongoDateConversion()
{
const string connectionString = "mongodb://localhost";
var client = new MongoClient(connectionString);
var server = client.GetServer();
var database = server.GetDatabase("test");
var collection = database.GetCollection<TestEntity>("entities");
var entity = new TestEntity {
Id = "1",
StringTest = "Test",
DateTest = new DateTime(2013, 10, 13) //this is the date
};
collection.Save(entity);
var id = entity.Id;
var query = Query<TestEntity>.EQ(e => e.Id, id);
var entityNew = collection.FindOne(query);
Assert.AreEqual(entityNew.Id, entity.Id);
Assert.AreEqual(entity.StringTest, entityNew.StringTest);
//Assert.AreEqual(entity.DateTest,entityNew.DateTest);
// This gives one day error:
// Expected: 2013-10-13 00:00:00.000
// But was: 2013-10-12 22:00:00.000
//Assert.AreEqual(entity.DateTest.ToLocalTime(),entityNew.DateTest.ToLocalTime());
// This gives a 2 hours error.
// Expected: 2013-10-13 02:00:00.000
// But was: 2013-10-13 00:00:00.000
Assert.AreEqual(entity.DateTest, entityNew.DateTest.ToLocalTime());
}
}
}
Если я раскомментировать любой из Asserts.AreEqual я получаю сообщение об ошибке (комментировал ниже).
Сохраненная юридическое лицо:
{
"_id" : "1",
"StringTest" : "Test",
"DateTest" : ISODate("2013-10-12T22:00:00Z")
}
Я понимаю, что это может быть что-то связано с ISODate и UTC (я в UTC + 1), но я немного досадно, что мои даты сохраняются с той разницей, день в коллекции и требует от меня конвертировать в localTime в любое время, когда я получаю некоторые данные с датами.
В чем причина такого поведения и есть ли способ избежать этого?
Спасибо! Большая проблема решена. Я пробовал код, а также если первое и второе утверждение все еще не проходят за 2-часовую разницу во времени, по крайней мере, я получаю тот же день ... Я понимаю .Net усложняет обработку DateTime, но в этом случае кажется, что мне больше проблема с драйвером Mongodb. Для основных операций с CRUD я бы ожидал получить то, что я вставил, как в любом другом решении. В этом случае я хочу только хранить даты (нет времени), сохраняя тики, так как долго усложняет запрос коллекции непосредственно в оболочке mogodb. – Ronnie