0

我想从 SQL Server 中的 datetime 字段中读取数据并将其存储为 int64,因为 datetime 在 SQL Server 中存储为 64 位。我会做类似的事情吗?

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

直接从 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-日期时间到 unix 时间戳/

于 2011-09-09T19:52:52.867 回答
0

为什么不dt.ToBinary()呢?

使用System.GC.GetTotalMemory,似乎DateTime使用 212 个字节,而long使用 8 个字节。

于 2011-09-09T20:03:56.257 回答