2009-05-21 19 views
0

在我們的代碼,我們有一個16字節的包裝struct我們稱之爲「ISOTIME」:這個「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; 

我試圖找出是什麼標準,這是應該執行。任何人都有線索?我的Google-fu失敗了。

回答

2

國際標準很少關注數據的詳細內存中表示,特別是在比特級別上(浮點標準當然是例外)。這是因爲這些東西本質上是不可移植的。這並不是說這個結構沒有標準,但我認爲這不太可能。

1

看起來像一個結構來處理ISO 8601 - 格式取決於如何顯示的數據:

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

我們使用它來轉換ISO 8601和從ISO 8601轉換,但首先實現它的人(可能在1995年)不再與公司在一起,並且我們確信有一些標準指示16字節打包二元結構,但我們無法找到它。據我所知,ISO 8601涉及文本表示,而不是二進制內存中的表示(今天早上已閱讀ISO 8601:2004)。 – 2009-05-21 17:18:31

2

正如加里·雷說,日期和時間數據的相互交換的主要標準是ISO 8601:2004。

顯示的數據結構可以處理標準格里曆,時間分辨率爲微秒。

還有其他相關標準 - 例如ISO/IEC 9899:1999(C)。它定義了一個不同的結構並指定了年份的編碼(例如,年份數字 - 1900存儲在tm_year元素中;例如,月份數字從1月份的0到12月份的11月份 - 適合索引到月份名稱數組中,但是否則糟糕)。 POSIX(ISO/IEC 9945-1:2008)繼承了C標準的時間處理。與C/POSIX相比,SQL(ISO/IEC 9075-2:2008)與ISO 8601更緊密地聯繫在一起。但是所顯示的結構可以在任何這些環境中使用 - 儘管它在C/POSIX環境中不是標準的。