本文档适用于进行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的时间。