.NET の DateTime の CompareTo() が呼び出されると、DateTime オブジェクトのティックを別のオブジェクトのティックと比較しますか? 比較はどのくらい正確ですか?SQL データベースから datetime2(7) の値をフェッチしており、比較が目盛り単位であることを確認したいと考えています。
2 に答える
はい、ティックが比較されます。これはEquals
、DateTime 構造体での実装方法です
public bool Equals(DateTime value)
{
return (this.InternalTicks == value.InternalTicks);
}
InternalTicks はulong
型のフィールドを返します。したがって、DateTime の比較は long 型の比較と同じ精度になります。1 つのティックは 100 ナノ秒を表します。
ところで、データベースはさまざまな精度で時間を保存できます-一部の精度が失われる可能性があります。しかし、トリックがあります -Ticks
データベースに値を保存することができます。この場合、後でまったく同じ .net DateTime オブジェクトを復元できます。
データベースの精度は、DateTime オブジェクトの精度とは関係ありません。DateTime オブジェクトは、100ns の内部ティック カウントを格納します。したがって、これは非常に正確です。はい、値が 1 ティック異なる場合、CompareTo は false を返します。
ただし、datetime フィールドには、それほど高い精度で日付が格納されない場合があります (ただし、datetime2(7) は十分に正確である必要があります)。したがって、データベースに 2 つの DateTime を保存し、それらの間隔が非常に短い場合、データベースから返される値は同じになる可能性があります。