2009-05-21 10 views
0

In unserem Code haben wir eine 16-Byte-struct gepackt, dass wir „ISOTIME“ nennen:Welchen Standard repräsentiert diese "ISOTIME" Struktur?

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; 

Ich versuche, was Standard, um herauszufinden, dass diese Umsetzung werden soll. Jeder hat eine Ahnung? Mein Google-Fu versagt mir.

Antwort

2

Internationale Standards befassen sich selten mit detaillierten In-Memory-Darstellungen von Daten, insbesondere auf der Bit-Ebene (Ausnahmen natürlich für Fließkomma-Standards). Dies liegt daran, dass solche Dinge von Natur aus nicht zu transportieren sind. Das heißt nicht, dass es für diese Struktur keinen Standard gibt, aber ich halte es für unwahrscheinlich.

1

Sieht aus wie eine Struktur ISO 8601 zu handhaben - das Format hängt davon ab, wie die Daten angezeigt werden:

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

Wir verwenden es, um zu und von ISO 8601 zu konvertieren, aber die Leute, die es zuerst (vielleicht 1995) implementiert haben, sind nicht mehr bei der Firma, und wir sind ziemlich sicher, dass es einen Standard gibt, der ein gepacktes 16-Byte anzeigt binäre Struktur, aber wir können es nicht finden. ISO 8601 befasst sich mit Textdarstellungen, nicht mit binären In-Memory-Darstellungen, soweit ich das beurteilen kann (nachdem ich heute morgen ISO 8601: 2004 gelesen habe). –

+0

Ältere IBM-Computer hatten früher einen 16-Byte-Packed-Integer-Standard. Könnte es daraus sein? –

+0

Dies kann es sein - http://publib.boulder.ibm.com/iseries/v5r2/ic2924/books/c0925083170.htm –

2

Als Gary Ray sagt, die wichtigsten Standards für den Austausch von Datums- und Zeitdaten sind nach ISO 8601: 2004.

Die angezeigte Datenstruktur kann den Gregorianischen Standardkalender mit einer Zeitauflösung von Mikrosekunden verarbeiten.

Es gibt andere relevante Normen - ISO/IEC 9899: 1999 (C) zum Beispiel. Es definiert eine andere Struktur und gibt die Kodierung von Jahren an (Jahreszahl - 1900 wird zB im Element tm_year gespeichert; auch Monatszahlen laufen von 0 für Januar bis 11 für Dezember - gut für die Indizierung in ein Array von Monatsnamen aber mies sonst). POSIX (ISO/IEC 9945-1: 2008) erbt seine Zeitverarbeitung vom C-Standard. SQL (ISO/IEC 9075-2: 2008) arbeitet enger mit ISO 8601 als mit C/POSIX. Die gezeigte Struktur kann jedoch in jeder dieser Umgebungen verwendet werden - obwohl dies in der C/POSIX-Umgebung nicht Standard ist.

Verwandte Themen