この回答は、.NET DateTimes から SQL Server の datetime
と同等のバイナリ形式への変換に単純に対応しています。 データ型なので、別の回答を保証するのに十分なほど異なると思います( こちら
こちら 大丈夫だったことを確認してください)。
@Martin Smith が指摘したように、 datetime
のバイナリ形式 特定の時点からの単なるティック数ではありません。
datetime
最初の 4 バイトは 1900 年 1 月 1 日からの日数であり、次の 4 バイトはその日の午前 0 時からの「ティック」数であり、ティックは 10/3 ミリ秒です。 /P>
.NET DateTime を同等のバイナリ表現に変換するには、'01-01-1900' 以降の日数を特定し、それを 16 進数に変換してから、午前 0 時からのティック数を計算する必要があります。 .NET ティックは 100ns です。
例:
DateTime dt = DateTime.Now; DateTime zero = new DateTime(1900, 1, 1); TimeSpan ts = dt - zero; TimeSpan ms = ts.Subtract(new TimeSpan(ts.Days, 0, 0, 0)); string hex = "0x" + ts.Days.ToString("X8") + ((int)(ms.TotalMilliseconds/3.33333333)).ToString("X8");
プレ>このコードを実行すると、
dt
9/14/2011 23:19:03.366
でした 、そしてhex
を設定します0x00009F5E01804321
に2011-09-14 23:19:03.363
に変換されます四捨五入が原因で、正確な日付を取得するのに常に問題があると思いますが、日時が正確に一致する必要がないクエリをミリ秒単位で使用できる場合、これは十分に近いものになる可能性があります。
編集
投稿した最初の回答の下のコメントで、SQL Server 2008 について尋ねました。
datetime2
データ型は 100 ナノ秒の精度で時間を保存します (少なくとも、デフォルトの精度で行います)。これは .NET とうまく一致します。それが SQL Server のバイナリ レベルでどのように格納されるかに興味がある場合は、私の答え 古い質問へ。