SylixOS移植時mk_time函數問題

1.適用範圍

        本文檔適用於進行SylixOS中間件移植的技術人員。python

2.問題復現

2.1 問題現象

    在進行Python3移植測試時,test_time.py測試用例出錯,錯誤如圖 2.1 所示:函數

image.png

圖 2.1 測試用例出錯信息測試

 

2.2 問題源碼

        測試用例的python源碼如圖 2.2 所示:spa

image.png

圖 2.2 問題源碼中間件

 

3.緣由分析

        mktime()是定義在time.h中的函數,函數原型爲time_t mktime(struct tm * timeptr)。做用是將參數timeptr所指的tm結構數據轉換成從公元1970年1月1日0時0分0 秒算起至今的時間所通過的秒數。blog

        在Linux下,timeptr所指的tm結構數據能夠爲任意數值。而在SylixOS下,mktime()函數的實現中有一個判斷,如程序清單 3.1所示:文檔

程序清單 3.1原型

if ((timeptr->tm_year + TM_YEAR_BASE) < EPOCH_YEAR )源碼

    return ((time_t) PX_ERROR);test

 

        其中,TM_YEAR_BASE宏爲1900,EPOCH_YEAR宏爲1970。現象爲若是傳入的tm_year值小於70,即實際傳入時間在1970年以前,會返回-1,致使test_time.py的測試函數沒法經過。

        這一行爲與Windows是一致的,由於以函數的功能來看,傳入在1970年以前的時間也不合理,SylixOS的mk_time()函數只處理1970年之後的時間,Windows上是隻處理1970-3000的時間。

相關文章
相關標籤/搜索