Как преобразовать байт [] в datetime в C #? - PullRequest
10 голосов
/ 16 февраля 2010

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

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

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

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

Ответы [ 2 ]

13 голосов
/ 16 февраля 2010

Столбец метки времени в SQL Server (теперь называется версией строки) не может быть преобразован в значение даты-времени - это чисто монотонно возрастающее значение, назначаемое сервером.

7 голосов
/ 16 февраля 2010

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

Метод 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);
...