2008-11-10 6 views
3

3/10/2008 = 1822556159Видел этот формат двоичной даты?

2/10/2008 = 1822523391

1/10/2008 = 1822490623

30/09/2008 = 1822392319

29/09/2008 = 1822359551

Это вся информация, которую я знаю в настоящее время.

Приращение дат на 32768, за исключением случаев, когда приращение составляет 32768 x 2 (65536).

Кто-нибудь видел этот формат двоичной даты и как я могу извлечь правильную дату?


Вполне возможно, что оставшаяся часть даты для времени (часы, минуты, секунды) 30-

+0

Пожалуйста, добавьте шестнадцатеричные значения, они могут быть проще проанализировать. – schnaader 2008-11-10 11:33:58

+0

Есть ли у вас какой-либо контекст, на котором вы столкнулись? – Roel 2008-11-10 12:04:47

ответ

9

сентября 2008

1822392319 = 0x6c9f7fff 
0x6c = 108 = 2008 (based on 1900 start date) 
0x9 = 9 = September 
0xf7fff - take top 5 bits = 0x1e = 30 

1 октября 2008

1822490623 = 0x6ca0ffff 
0x6c = 108 = 2008 
0xa = 10 = October 
0x0ffff - take top 5 bits = 0x01 = 1 

Кто-нибудь догадывается, для чего нужны остальные 15 бит.

РЕДАКТИРОВАТЬ: мимо принимает верхние 5 бит Я имею в виду:

day_of_month = (value >> 15) & 0x1f 

Аналогично:

year = (value >> 24) & 0xff + 1900 
month = (value >> 20) & 0x0f 
+0

0x0ffff - take top 5 bits = 0x01 = 1 Alnitak ... что вы подразумеваете под этим заявлением? Можете ли вы расширить? – 2008-11-10 12:33:38

+0

Он означает, что наиболее значимые 5 бит 0x0ffff равны 00001. Таким образом, из последних 20 бит значения формат использует 5 для дня, а остальные 15 - 1 во всех приведенных примерах. – 2008-11-10 12:39:28

2

записать его в двоичном формате:

a = 1822556159 
1101100 1010 00011 111111111111111 
b = 1822523391 
1101100 1010 00010 111111111111111 
c = 1822490623 
1101100 1010 00001 111111111111111 
d = 1822392319  
1101100 1001 11110 111111111111111 

, где 1101100 108, как сказал Алнитак, остальные - месяц (1010 или 1001) и дни.

1s в конце может быть зарезервирован для представления секунд/миллисекунд.

0

32768 - 2^15; они резервируют 15 бит за те дни, которые, как я думаю, не делятся равномерно на любую полезную комбинацию часов, минут и/или секунд.

2

EDIT: Alnitak является правильным в этом представлении двоичной даты с фиксированной точкой. Однако принципы могут быть похожими на то, что описано ниже; вместо десятичного формата формат фиксирован, а более низкие 15 бит - это, скорее всего, время. Если у вас есть примеры, отправьте их, и мы постараемся помочь.

ОРИГИНАЛ: Это, скорее всего, формат даты OLE/COM Windows, который использует Double для представления даты и времени. Целочисленная часть числа относится к дате, а дробь - для времени. Он может представлять даты с 1 января по 100 декабря и 31 декабря 9999 года. Дополнительную информацию можно найти по адресу MSDN или google для OLE date COM double.

EDIT: Код: C# example Использование DateTime.FromOADate. Вот несколько деталей от MSDN VariantTimeToSystemTime.

Вариант времени хранится в виде 8-байтовой реальной стоимости (двойной), представляющей дату с 1 января 1753 года по 31 декабря 2078 года включительно.

Значение 2.0 представляет 1 января 1900 года; 3.0 - 2 января 1900 года и т. Д.

Добавление 1 к значению увеличивает дату на день. Дробная часть значения представляет собой время суток. Поэтому 2.5 представляет собой полдень 1 января 1900 года; 3.25 представляет 6:00 A.M. 2 января 1900 года и т. д.

Отрицательные числа представляют даты до 30 декабря 1899.

Это немного противоречивыми, поскольку документация COleDateTime говорит, что поддерживает 1 января, 100, в то время как эта документация говорит, что поддерживает 1 января 1753.

Есть интерфейсы для VB (используйте CDbl() и CDate()), C# (DateTime.FromOADate/ToOADate), Java (OLEDate - выглядит устаревшим, хотя), Delphi, Python и т.д.

0

Он re - еще один «таинственный» формат, который я нашел с помощью приложения для резервного копирования WinMobile (http://www.dotfred.net/default.htm): Чтение назначений. Я получаю такие строки (значения даты задаются на устройстве PPC): 0xab, 0xaa, 0xaa, 0xaa, 0x82,0xae , 0xe3,0x40 (10.Mai 2010) 0xab, 0xaa, 0xaa, 0xaa, 0xa2,0xae, 0xe3,0x40 (11.Mai 2010) 0x55,0x55,0x55,0x55,0x55,0x55,0x00,0x40 (01 .Jan 1900) 0x55,0x55,0x55,0x55,0x55,0x55,0x08,0x40 (02.Jan 1900)

Все это основано - я ожидаю, - на MS http://msdn.microsoft.com/en-us/library/aa908499%28v=MSDN.10%29.aspx .. но выше кажется чтобы не соответствовать этой модели.

Любая помощь/предложение? Спасибо Günter