本文檔適用於進行SylixOS中間件移植的技術人員。python
在進行Python3移植測試時,test_time.py測試用例出錯,錯誤如圖 2.1 所示:函數
圖 2.1 測試用例出錯信息測試
測試用例的python源碼如圖 2.2 所示:spa
圖 2.2 問題源碼中間件
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的時間。