Приведение байта к DateTime, вызывающее ошибку C # - PullRequest
0 голосов
/ 15 декабря 2011

При попытке выполнить следующее приведение

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

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

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

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

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

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

Ответы [ 6 ]

1 голос
/ 15 декабря 2011

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

DateTime issueDate = new DateTime(binfile.ReadInt64());
1 голос
/ 15 декабря 2011

Это вряд ли удивительно. Как фреймворк .Net должен приводить байт к DateTime?

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

Но байт - это байт. Это не свидание.

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

0 голосов
/ 02 февраля 2016

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

            long utcMD = BitConverter.ToInt64(xBankPacketStructureParser.baMessageDate, 0);
            xBankPacket.xMessageDateTime = DateTime.FromBinary(utcMD);
0 голосов
/ 15 декабря 2011

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

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

0 голосов
/ 15 декабря 2011

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

0 голосов
/ 15 декабря 2011

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

...