Ich arbeite mit einer MongoDB-Datenbank. Ich weiß, wenn Sie eine DateTime in Mongo einfügen, konvertiert es es in UTC. Aber ich mache einen Komponententest und meine Assert versagt.DateTime ToLocalTime schlägt fehl
[TestMethod]
public void MongoDateConversion() {
DateTime beforeInsert = DateTime.Now;
DateTime afterInsert;
Car entity = new Car {
Name = "Putt putt",
LastTimestamp = beforeInsert
};
// insert 'entity'
// update 'entity' from the database
afterInsert = entity.LastTimestamp.ToLocalTime();
Assert.AreEqual(beforeInsert, afterInsert); // fails here
}
Ich muss etwas offensichtlich fehlen. Als ich im Debugger sehen, kann ich sehen, dass das Spiel des Datetime, aber die Assertion immer noch sagt, dass sie dies nicht tun (aber sie tun):
Result Message: Assert.AreEqual failed. Expected:<5/21/2015 8:27:04 PM>. Actual:<5/21/2015 8:27:04 PM>.
Irgendwelche Ideen, was ich falsch hier?
EDIT:
ich mit zwei möglichen Lösungen habe kommen, von denen beide mir verlangen zu erinnern, etwas zu tun (die auf nicht immer das Beste ist, verlassen ...):
eine davon ist eine Erweiterungsmethode zu verwenden, jede Datetime aus der Datenbank kommen trunkieren:
public static DateTime Truncate(this DateTime dateTime) {
var timeSpan = TimeSpan.FromMilliseconds(1);
var ticks = -(dateTime.Ticks % timeSpan.Ticks);
return dateTime.AddTicks(ticks);
}
die anderen, nach http://alexmg.com/datetime-precision-with-mongodb-and-the-c-driver/ liest, ist jede Datetime in der POCO-Klasse zu markieren:
public class Car : IEntity {
public Guid Id { get; set; }
[BsonDateTimeOptions(Representation = BsonType.Document)]
public DateTime LastTimestamp { get; set; }
}
diesem Artikel MongoDB Datumzeit Präzision zu erklären: http: // alexmg.com/datetime-precision-with-mongodb-und-der-c-driver/ –