У меня есть поле типа TimeStamp в базе данных, которая преобразовывается в байте [] в коде c#, и я должен преобразовать его в значение DateTime. Таким образом, я хочу преобразовать из массива байтов в DateTime.
Уже используемый этот код:
byte[] byteValue = someValue;
long longVar = BitConverter.ToInt64(byteValue);
DateTime dateTimeVar = DateTime.FromBinary(longVar);
это в порядке?
Нет, это не так.
Метод FromBinary
принимает длинное значение, которое создается с помощью метода ToBinary
. Он содержит компоненты Kind
и Ticks
, и это не то, что содержит временная метка базы данных.
Использование BitConverter
для получения длинного значения является правильным, но тогда вы должны взять начало отсчета времени для метки времени и добавить длинное значение в качестве правильной единицы. Предполагая, что это метка времени из базы данных MySQL, IIRC - это количество миллисекунд с 1980-01-01:
long longVar = BitConverter.ToInt64(byteValue, 0);
DateTime dateTimeVar = new DateTime(1980,1,1).AddMilliseconds(longVar);
Столбец отметки времени в SQL Server (теперь называется rowversion) не может быть преобразован в значение datetime - это просто монотонно увеличивающееся значение, присваиваемое сервером.