2011-09-09 8 views
0

datetimeはSQL Serverの64ビットとして格納されているため、SQL Serverのdatetimeフィールドから読み取り、int64として格納したいと考えています。私はこれに似た何かをするだろうか?SQL Server datetimeをADO.NETのC#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

なぜあなたはそのようなことをしますか?どういう理由ですか? – Oded

+1

多分私は誤解や誤解をしているかもしれませんが、[Int64](http://msdn.microsoft.com/en-us/library/system.int64.aspx)は64ビットと[datetime](http:// msdn .microsoft.com/ja-us/library/ms187819.aspx)は64ビットなので、ゲインは何ですか?プログラミングの単なる練習であれば、私はそれを続けます。 – billinkc

答えて

0

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

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

それは、あなたのアプリでいじるのすべてのビットを保存します。

あなたがTSQLでのmysql-スタイル「UNIX_TIMESTAMP()」機能を実装したい場合は、このブログのエントリは、そのための関数を作成する方法を示しています。http://skinn3r.wordpress.com/2009/01/26/t-sql-datetime-to-unix-timestamp/

+0

UNIXのタイムスタンプは通常32ビットです... –

+0

trueですが、32ビットのunixしかありません。 64bitのtime_tは既にかなり広く普及しています。そして、C#でdatetime-> int変換を行うよりも32ビット - > 64ビットint変換を行う方が簡単です –

0

なぜdt.ToBinary()

System.GC.GetTotalMemoryを使用すると、DateTimeは212バイトを使用し、longは8バイトを使用するようです。

関連する問題