0

datetime は SQL Server で 64 ビットとして格納されるため、SQL Server の datetime フィールドから読み取り、int64 として格納したいと考えています。私はこれに似たようなことをしますか?

DateTime dt = sqlDataReader.GetDateTime(0);
byte[] bt = BitConverter.GetBytes(dt);
// unfortunately, GetBytes() does not take DateTime as an argument
long ldt = (Convert.ToInt64(bt[0]) << 56)
         + (Convert.ToInt64(bt[1]) << 48)
         + (Convert.ToInt64(bt[2]) << 40)
         + (Convert.ToInt64(bt[3]) << 32)
         + (Convert.ToInt64(bt[4]) << 24)
         + (Convert.ToInt64(bt[5]) << 16)
         + (Convert.ToInt64(bt[6]) << 8)
         + (Convert.ToInt64(bt[7]));
4

2 に答える 2

0

なぜdt.ToBinary()ですか?

を使用すると、 8バイトを使用しているのに対し、212バイトを使用System.GC.GetTotalMemoryしているようです。DateTimelong

于 2011-09-09T20:03:56.257 に答える
0

日付値を unixtimestamp スタイルの INT として SQL サーバーから直接取得します。

select datediff(second, {d'1970-01-01'}, yourdatefield) as seconds

アプリをいじる手間が省けます。

mysql スタイルの「unix_timestamp()」関数を tsql に実装する場合は、このブログ エントリにその関数の作成方法が示されています: http://skinn3r.wordpress.com/2009/01/26/t-sql datetime-to-unix-timestamp/

于 2011-09-09T19:52:52.867 に答える