2011-12-15 58 views
-2

當試圖執行下列投鑄造字節爲DateTime導致錯誤C#

DateTime issueDate = Convert.ToDateTime(binfile.ReadByte()); 

(順便說一句讀取.dat文件),我得到一個運行時錯誤說,「從字節無效的轉換爲DateTime」

不知道爲什麼我得到這個錯誤,也沒有如何解決它。

當我用它工作正常的字符串同樣的方法,

string firstName = Convert.ToString(binfile.ReadByte()); 

感謝您的幫助。

+4

什麼時辰已到?我不知道。也許是0xFD?一個字節只能保存8位,即256個不同的值。你覺得你可以從中得到一個'DateTime'嗎? –

+1

你想讀什麼樣的數據? 「.dat」根本沒有說什麼。它是二進制格式嗎? –

回答

1

您不能將該字節轉換爲DateTime。如果dt的值存儲爲蜱隨後的代碼應該是

DateTime issueDate = new DateTime(binfile.ReadInt64()); 
0

binfile.ReadByte()Int32類型的無符號字節。如果您嘗試將其轉換爲DateTime,那肯定會失敗。你應該閱讀一個完整的字符串,然後輸入它到DateTime

+0

您無法將字符串轉換爲DateTime。您可以解析字符串並獲取DateTime值作爲結果 –

1

這並不奇怪。 .Net框架如何爲DateTime投下一個字節?

轉換爲字符串的工作原理:一個字節可以表示爲一個字符串,就像框架中的幾乎每個類/結構體一樣。

但是一個字節是一個字節。這不是一個日期時間。

你應該做的是,如果我猜對了,讀取文件中包含的文本「as text」,隔離代表有效DateTime字符串的部分,然後轉換它。這應該工作。

0

可能是因爲你從流中讀取了一個字節,sizeof(DateTime)是8個字節。什麼值得到Convert.ToString(binfile.ReadByte())?這是正確的價值嗎?

0

您想如何工作?一個字節有256個可能的值;沒有更多信息,就沒有有意義的轉換:您希望將0到255之間的整數與256個或更少的DateTime值相關聯?

如果您有問題的答案,您可以自己實現轉換,而不會有麻煩。

0

可以使用BitConverter爲轉換的Int64(即長),之後採取的日期時間從長着DateTime.FromBinary

  long utcMD = BitConverter.ToInt64(xBankPacketStructureParser.baMessageDate, 0); 
      xBankPacket.xMessageDateTime = DateTime.FromBinary(utcMD);