Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1606895
  • 博文数量: 143
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1462
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-23 11:14
文章分类

全部博文(143)

文章存档

2022年(3)

2021年(13)

2020年(21)

2019年(8)

2018年(28)

2017年(7)

2016年(63)

我的朋友

分类: 嵌入式

2017-10-31 21:30:02

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是错误的。以下是我实现的代码:


在开发板上的执行结果:

阅读(7825) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~