2009-05-21 5 views
0

Dans notre code, nous avons un 16 octets emballé struct que nous appelons « ISOTIME »:Quelle norme représente cette structure "ISOTIME"?

typedef struct isotime { 
    struct { 
     uint16_t iso_zone : 12; // corresponding time zone 
     uint16_t iso_type : 4; // type of iso date 
    } iso_fmt; 

    int16_t iso_year; // year 
    uint8_t iso_month; // month 
    uint8_t iso_day; // day 
    uint8_t iso_hour; // hour 
    uint8_t iso_minute; // minute 
    uint8_t iso_second; // second 
    uint8_t iso_centi; // centi-second 
    uint8_t iso_hundred; // hundreds of micro-seconds 
    uint8_t iso_micro; // micro-seconds 
    uint32_t iso_unused; // pad out to 16 bytes 
} ISOTIME; 

Je suis en train de comprendre ce standard ce qui est censé être mise en œuvre. Quelqu'un a une idée? Mon Google-fu me manque.

Répondre

2

Les normes internationales se préoccupent rarement des représentations détaillées en mémoire des données, en particulier au niveau des bits (à l'exception bien sûr des normes à virgule flottante). C'est parce que de telles choses sont intrinsèquement non portables. Cela ne veut pas dire qu'il n'y a pas de norme pour cette structure, mais je pense que c'est improbable.

1

On dirait une structure pour gérer ISO 8601 - le format dépend de la façon dont les données sont affichées:

20030103 = Basic Format 
20030103T0700-0500 = Basic Format w/ Time and Zone 
2003-01-03 = Extended Format 
+0

Nous l'utilisons pour convertir vers et depuis ISO 8601, mais les personnes qui l'ont implémenté en premier (peut-être en 1995) ne le sont plus, et nous sommes presque sûrs qu'il existe une norme qui indique un paquet de 16 octets structure binaire mais nous ne pouvons pas le trouver. L'ISO 8601 concerne les représentations textuelles, pas les représentations binaires en mémoire, autant que je sache (après avoir lu ISO 8601: 2004 ce matin). –

+0

Les anciens ordinateurs IBM avaient une norme Integred Packed Integrity de 16 octets. Cela pourrait-il être de cela? –

+0

Cela peut être - http://publib.boulder.ibm.com/iseries/v5r2/ic2924/books/c0925083170.htm –

2

Comme le dit Gary Ray, la norme principale pour l'échange de données de date et l'heure est certifiée ISO 8601: 2004.

La structure de données représentée peut gérer le calendrier grégorien standard avec une résolution temporelle en microsecondes.

Il existe d'autres normes de pertinence - ISO/CEI 9899: 1999 (C) par exemple. Il définit une structure différente et spécifie le codage des années (le numéro de l'année - 1900 est stocké dans l'élément tm_year, par exemple, les numéros du mois vont de 0 pour janvier à 11 pour décembre - bon pour l'indexation dans un tableau de noms de mois moche autrement). POSIX (ISO/CEI 9945-1: 2008) hérite de sa gestion du temps à partir de la norme C. SQL (ISO/IEC 9075-2: 2008) travaille plus étroitement avec ISO 8601 qu'avec C/POSIX. Mais la structure montrée pourrait être utilisée dans n'importe lequel de ces environnements - bien qu'elle ne soit pas standard dans l'environnement C/POSIX.

Questions connexes