2014-09-04 19 views
5

Ich habe eine Variable vom Typ DateTimeOffSet. Ich möchte alle Projekte filtern, die nach dem 1. Januar erstellt wurden 2010Wie zwei DateTimeOffSet zu vergleichen?

Also habe ich schrieb die folgende Abfrage:

var _date = new DateTimeOffset(2010, 01, 01, 0, 0, 0, new TimeSpan(-7, 0, 0)); 

    var projects = _repository.Find<Project> 
       (x => x.CompanyId = CompId && x.CreatedOn > _date) 
       .ToList(); 

Aber wenn ich in der Datenbank suchen, sind diejenigen, die Art Werte sehe ich:

2001-01-25 05:21:46.4370000 -08:00 
2005-06-17 00:00:00.0000000 -07:00 

Offensichtlich haben einige der Werte -08: 00 und andere haben -07: 00. Ist meine obige Abfrage noch relevant? Wenn ich mir das Ergebnis ansehe, wird die Filterung so durchgeführt, wie ich es erwarte. Die einzige Sorge ist, was die Bedeutung dieses Offset-Teils ist, vielleicht ist das Ergebnis zufällig gut.

Ich bin nicht so vertraut mit der Art und Weise DayeTimeOffSet funktioniert.

Antwort

8

So ist meine obige Abfrage noch relevant?

Ja. Wenn Sie zwei Werte vergleichen, ist es die "absolute" Zeit, die verglichen wird. Die Dokumentation spricht darüber in Bezug auf die UtcDateTime Eigenschaft. Zum Beispiel von der op_GreaterThan documentation:

wahr wenn der UtcDateTime Wert von links ist später als der UtcDateTime Wert von rechts; andernfalls false.

Also solange das das Verhalten ist, das Sie wollen (was ich mir vorstellen könnte), sollten Sie in Ordnung sein. (Zugegebenermaßen wissen wir nicht, wo die Abfrage ausgeführt wird - wenn dies LINQ to SQL oder EF ist, dann würden Sie sich auf verlassen, dass die gleiche Semantik implementiert, aber ich denke, das ist eine vernünftige Erwartung.)

5

DateTimeOffset verwaltet den Offset von GMT zum Zeitpunkt &, an dem der Wert generiert wurde. Das bedeutet, dass "2001-01-25 05: 21: 46.4370000 -08: 00" an einem Ort und zu einer Jahreszeit (in Bezug auf DST) aufgezeichnet wurde, die 8 Stunden hinter GMT lag, während "2005-06-17 00: 00: 00.0000000 -07: 00 "wurde an einem Ort & Zeit des Jahres aufgezeichnet, die 7 Stunden hinter GMT war.

Der Zeitzonenanteil wird jedoch ignoriert, wenn Vergleiche durchgeführt werden. Mit anderen Worten, jedes Datum wird in GMT/UTC konvertiert und diese werden verglichen.