2009-04-05 7 views
5

Je sais les suivantes paire de valeurs hexagonales et dates:DateTime format hexadécimal

 
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 

Je ne peux pas comprendre comment convertir de l'un à l'autre ....

Toute personne reconnaît l'hexagone format?

Al

Répondre

11

Il est un bitfield simple, même si c'est un format de temps assez bizarre :)

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

serait ma conjecture.

+0

me battre à elle. :-) J'ai déjà vu ce format, mais seulement dans une autre question de stackoverflow! – bobince

+0

Yikes ... Au départ, je pensais à Unixtime, car aucune des structures temporelles courantes de Windows ne correspond à 32 bits, mais c'est ... étrange. Surtout que le mois est apparemment basé sur zéro mais les jours ne le sont pas. – Joey

+0

Wow. Merci Johannes. J'apprécie vraiment la réponse. Et si vite aussi. Brillant! – Alan

2

Année de 12 bits, mois de 4 bits (base 0), jour de 5 bits, heure de 5 bits, minute de 6 bits.

joli puzzle :-)

1

Je me rends compte que c'est un vieux sujet, mais je l'ai trouvé utile et pensé que je pourrais y ajouter mes 2 cents.

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; 
} 
Questions connexes