Как преобразовать дату и время SQL Server в C # int64 в ADO.NET? - PullRequest
0 голосов
/ 09 сентября 2011

Я хотел бы прочитать из поля datetime в SQL Server и сохранить его как int64, так как datetime хранится как 64-битный в SQL Server. Буду ли я делать что-то похожее на это?

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]));

Ответы [ 2 ]

0 голосов
/ 10 сентября 2011

Почему бы не dt.ToBinary()?

Используя System.GC.GetTotalMemory, кажется, что DateTime использует 212 байтов, а long использует 8 байтов.

0 голосов
/ 09 сентября 2011

Получите значение даты в виде INT в стиле unixtimestamp напрямую с SQL-сервера:

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

Это сэкономит вам все лишние хлопоты в вашем приложении.

Если вы хотитереализовать функцию «unix_timestamp ()» в MySQL в tsql, эта запись блога показывает, как создать для нее функцию: http://skinn3r.wordpress.com/2009/01/26/t-sql-datetime-to-unix-timestamp/

...