2011-12-15 2 views
-2

При попытке выполнить следующие ввергнутьCasting байт DateTime вызывая ошибки C#

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

(чтение .dat файлов, кстати) я получаю ошибку во время выполнения программы, говоря, «Invalid бросок от байта до DateTime»

Не знаю, почему я получаю эту ошибку и как ее исправить.

Когда я использую тот же подход, со строкой она работает нормально,

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

Спасибо за любую помощь.

+4

Что время? Я не знаю. 0xFD может быть? Байт может содержать только 8 бит, это 256 различных значений. Как вы думаете, вы можете получить «DateTime» из этого? –

+1

Какие данные вы пытаетесь прочитать? «.dat» ничего не говорит. Это бинарный формат? –

ответ

1

Вы не можете преобразовать байт в DateTime. Если значение дт хранится в виде клещей, то код должен быть

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

binfile.ReadByte() неподписанный байт типа Int32. Если вы попытаетесь преобразовать это значение в DateTime, то определенно это не удастся. Вы должны прочитать полную строку, а затем напечатать ее до DateTime

+0

вы не можете наложить строку на DateTime. Вы можете проанализировать строку и получить значение DateTime в качестве результата –

1

Это не удивительно. Как предполагается, что каркас .Net должен использовать байты для DateTime?

Преобразование в строковые работы: байт может быть представлен как строка, как почти каждый класс/структура в рамках.

Но байт является байтом. Это не время.

Что вы должны делать, если я правильно понял, прочитав текст, содержащийся в файле «как текст», выделите часть, которая представляет действительную строку DateTime, а затем преобразуйте ее. Это должно сработать.

0

Возможно, это потому, что вы читаете только один байт из потока и sizeof (DateTime) - 8 байт. Какое значение получает Convert.ToString (binfile.ReadByte())? Правильно ли это?

0

Как вы хотели бы работать? Для байта имеется 256 возможных значений; без дополнительной информации нет значимого преобразования: какой набор из 256 или менее значений DateTime вы бы хотели связать с целыми числами от 0 до 255?

Если у вас есть ответ на этот вопрос, вы можете реализовать преобразование самостоятельно с небольшими проблемами.

0

можно использовать BitConverter для преобразования int64 (что долго), и после этого принимать DateTime из долго с DateTime.FromBinary

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