Дата и время От 5 или 7 байтов - PullRequest
0 голосов
/ 03 ноября 2018

Я работаю в C # с некоторыми иностранными данными и пытаюсь получить время и дату из базы данных. Я дважды изменил время, чтобы увидеть, какие байты изменились в файле, и нашел 2 места, где данные были обновлены. Первый набор - 7 байтов, второй - 5.

Глядя на байты, связанные с тысячами записей, я могу сказать, что последний байт в блоке 7 всегда равен 64, все байты в группе из 5 различаются.

Кто-то сказал мне, что начальная дата начала была 01.01.1850, я еще не смог проверить это. Здесь я переместил время на 30 минут:

Original Time 11:45 01/02/2006
New Time      12:15 01/02/2006
94 DE 94 DE 9C 03 64 00 65
First Set:
Original:94 DE 94 DE 9C 03 64
New:     94 DE 94 DE 85 03 64

Second Set: 
Original:94 DE BF 04 05
New:     94 DE 79 04 05

Затем я переместил его обратно в 11:45, но перевел на 24 часа:

Original Time 11:45 01/02/2006
New Time      11:45 01/03/2006

First Set:
Original:94 DE 94 DE 9C 03 64 
New:     94 DE 94 DE 8B 03 64

Second Set: 
Original:94 DE 79 04 05
New:     95 DE 79 04 05

Я пытался преобразовать каждый из них, но безуспешно, и я не мог найти где-нибудь, что 5 или 7 байт являются «нормой» для использования обычных инструментов

//94 DE 94 DE 9C 03 64
//{ 148, 222, 148, 222, 156, 3, 100, 0, } //this fails unless you set last 2 to 0
//94 DE 79 04 05
//{ 148, 222, 121, 4, 5, 0, 0, 0, };
byte[] timestamp = new byte[] { 148, 222, 121, 4, 5, 0, 0, 0, };
DateTime Epoch = new DateTime(1850, 1, 1, 0, 0, 0, DateTimeKind.Utc);
ulong milliseconds = BitConverter.ToUInt64(timestamp, 0);
var result = Epoch + TimeSpan.FromMilliseconds(milliseconds);
Console.WriteLine(result.ToString());
//outputs 9/7/1850 10:05:32 AM
...