2010-02-16 33 views
9

我在數據庫中有一個TimeStamp類型的字段,它在c#代碼中的byte []中被轉換,我需要將它轉換爲DateTime值。 所以我想從一個字節數組轉換成DateTime。如何在C#中將字節[]轉換爲日期時間?

已使用此代碼:

byte[] byteValue = someValue; 
long longVar = BitConverter.ToInt64(byteValue); 
DateTime dateTimeVar = DateTime.FromBinary(longVar); 

是這樣行嗎?

+4

爲什麼您首先將時間戳轉換爲byte []? –

+1

不知道字節[]來自哪裏,你可能不得不處理字節序問題。 –

+0

這取決於你的意思是「好」。我從來沒有嘗試過這種方法,但它似乎並不是一種從數據庫中檢索日期和時間的特別直觀的方法。 –

回答

6

不,這是不正確的。

FromBinary方法需要使用ToBinary方法創建的長整型值。它包含KindTicks組件,這不是數據庫時間戳記包含的內容。

使用BitConverter獲取長整數值是正確的,但是您必須將時間標記的起始時間作爲正確的單位並添加長整數值。假設它是來自MySQL數據庫的時間戳,IIRC它是從1980-01-01開始的毫秒數:

long longVar = BitConverter.ToInt64(byteValue, 0); 
DateTime dateTimeVar = new DateTime(1980,1,1).AddMilliseconds(longVar); 
+0

thnx Guffa,我正在嘗試這個 –

+0

startIndex參數在BitConverter方法中丟失。它應該是BitConverter.ToInt64(byteValue,0) 檢查https://msdn.microsoft.com/en-us/library/system.bitconverter.toint64(v=vs.110).aspx –

+0

@AliHasan:是的,是課程。感謝發現,我糾正了答案。 – Guffa

13

SQL Server(現稱爲rowversion)中的時間戳列不能轉換爲日期時間值 - 它純粹是由服務器分配的單調遞增值。

+0

所以,它不需要做日期時間?那麼爲什麼它被用於,特別是爲什麼它與日期時間值或概念相關? (也許這個問題並不完全確切,但是這一次我相信,我不知道我是否已經閱讀過某個地方,它與日期時間有某種關係) –

+4

@george_test - bascially,它的名字很糟糕 - 這就是爲什麼現在更正確地稱爲「rowversion」,而不是「時間戳」。它沒有(在SQL Server中)與時間*有關*,除了(如已經描述的)單調遞增之外。 –

+0

thnx thnx和thnx再次。我添加了另一個日期類型的列,現在我將它用於我的目的。 –

相關問題