2009-04-05 18 views
5

Tengo el siguiente saben par de valores hexadecimales y fechas:DateTime formato hexadecimal

 
7D 92 D2 5C = 26/03/2009 - 09:28 
7D 92 DA CC = 27/03/2009 - 11:12 
7D 92 E3 56 = 28/03/2009 - 13:22 
7D 92 EC 4F = 29/03/2009 - 17:15 
7D 92 F3 16 = 30/03/2009 - 12:22 
7D 92 FB 1A = 31/03/2009 - 12:26 
7D 93 0B 01 = 01/04/2009 - 12:01 
7D 93 12 88 = 02/04/2009 - 10:08 
7D 93 1A 30 = 03/04/2009 - 08:48 
7D 93 22 DD = 04/04/2009 - 11:29 
7D 93 2A D5 = 05/04/2009 - 11:21 

no puedo encontrar la manera de convertir de la una a la otra ....

Alguien reconoce el hexágono ¿formato?

Al

Respuesta

11

Es un campo de bits simple, a pesar de que es un formato de tiempo bastante raro :)

 
1111101100100101101001001011100 
         011100 - 28 minutes 
        01001  - 09 hours 
       11010   - 26 days 
      0010     - month 3 (zero-based, hence 2) 
11111011001      - 2009 years

sería mi conjetura.

+0

me ganaron. :-) He visto este formato antes, ¡pero solo en otra pregunta de stackoverflow! – bobince

+0

Yikes ... Inicialmente pensé en Unixtime, ya que ninguna de las estructuras de tiempo comunes de Windows caben en 32 bits, pero esto es ... extraño. Especialmente porque el mes aparentemente no tiene base pero los días no. – Joey

+0

Wow. Gracias, Johannes. Realmente aprecio la respuesta. Y muy rápido también ¡Brillante! – Alan

2

12 bit año, 4 bit mes (0), 5 bit día, 5 bit hora, 6 bit minute.

rompecabezas agradable :-)

1

Soy consciente de que este es un viejo tema, pero me pareció útil y pensaba que iba a añadir a ella mis 2 centavos.

u8 getMinutes(u32 in) 
{ 
    return in & 0x3f; 
} 

u8 getHours(u32 in) 
{ 
    return (in>>6) & 0x1f; 
} 

u8 getDays(u32 in) 
{ 
    return (in>>11) & 0x1f; 
} 

u8 getMonths(u32 in) 
{ 
    return ((in>>16)& 0xf)+1; 
} 

u16 getYears(u32 in) 
{ 
    return (in>>20) & 0x7ff; 
} 

void printDate(u32 in) 
{ 
    printf("%d/%d/%d - %d:%d", getDays(in), getMonths(in), getYears(in), getHours(in), getMinutes(in)); 
} 

int main(int argc, char *argv[]) 
{ 
    u32 t = 0x7D92D25C; 
    printDate(t); 
    return 0; 
} 
Cuestiones relacionadas