strptime()和strftime()
一、功能实现
1、函数功能
名称
|
功能
|
其他
|
strptime
|
字符串转时间
|
可用sscanf()自行实现(见:本文)
|
strftime
|
时间转字符串
|
可用sprintf()自行实现(见:Linux
时间转字符串(格式化时间))
|
2、举例实现
见:
linux 下时间字符串和time_t类型之间的相互转化
linux中常用时间和字符串之间相互转化
二、自行实现strptime()功能
1、背景介绍:当调用c标准库中的strptime()实现字符串转时间的功能时,编译出的ELF文件a.out,在Linux服务器中能够正常执行,但在开发板上显示乱码。
实现:
结果_Linux服务器:
结果_开发板:
使用readelf工具查看两个ELF文件所依赖的c库:
Linux服务器上a.out,所链接的库是libc.so.6,是glibc库。
单板a.out,所链接的库是libc.so.1,是libc库。
glibc 和 libc 都是 Linux 下的 C 函数库。glibc本身是GNU旗下的C标准库,后来逐渐成为了Linux的标准c库,而Linux下原来的标准c库Linux libc逐渐不再被维护。而glibc无疑是用得最多的。glibc在/lib目录下的.so文件为libc.so.6。
所以,我个人猜测是老的libc.so.1中strptime()的实现更现在不一样,当前这种写法不对,具体就要去看老库中的实现了。而被人也懒得去找老库中的实现,以及为什么会出现同一份代码,不同结果的问题。
2、自行实现strptime()
首先,告诉你个诀窍,当你无从下手的时候,你可以在现有代码grep一把作为参考。如:grep -rn "strptime(" 或 在OPENWRT平台中用 grep -rn "#ifdef HAVE_STRPTIME" 搜索的更全。
但是,我仔细看了下,在我的OPENWRT平台中有六七处自行实现strptime()功能的模块,但是都有缺陷,如:.tm_yday或.tm_wday未赋值,随不影响最终结果,但是若中间打印后发现如week是错误的。以下是我实现的代码:
在开发板上的执行结果:
阅读(9224) | 评论(0) | 转发(0) |