Как преобразовать байт[] в datetime в C#?

У меня есть поле типа TimeStamp в базе данных, которое преобразуется в byte[] в коде c#, и мне нужно преобразовать его в значение DateTime. Поэтому я хочу преобразовать из массива байтов в DateTime.

уже использовал этот код:

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

это нормально?

2 ответов


нет, это неправильно.

на 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);

столбец timestamp в SQL Server (теперь называется rowversion) не конвертируется в значение datetime - это чисто монотонно возрастающее значение, назначенное сервером.