怎样获取 RTC 的具体数值?

发布于 2019-06-12 14:26:17
  • 本帖最后由 frankfan 于 2019-6-12 14:31 编辑 *

API手册上只有 set_date(),set_time(),time() 这几个函数。
例程里面有一个 rt_kprintf("%s
", ctime(&now)); 的语句获得年月日时分秒的字符串。

请问一下,怎样获取年月日时分秒的具体数值?
API手册里找不到这样的函数。

另外 ctime() 这个函数在哪里能看到源代码?

查看更多

关注者
0
被浏览
1.1k
word天
word天 2019-06-12
  1. 获取当前的linux时间戳[code]time_t __time;

__time = time(NULL);[/code]

2.通过时间戳获取年月日时分秒

[code]struct tm *tm_now;
struct tm now;
time_t __time;

__time = time(NULL);

/ converts calendar time time into local time. /
tm_now = localtime(&__time);
/ copy the statically located variable /
memcpy(&now, tm_now, sizeof(struct tm));
/*

now.tm_hour 时
now.tm_min 分
now.tm_sec 秒
now.tm_year 年
now.tm_mon 月
now.tm_mday 日

*/[/code]

struc tm 结构如下

[code]struct tm {
int tm_sec; / 秒,范围从 0 到 59 /
int tm_min; / 分,范围从 0 到 59 /
int tm_hour; / 小时,范围从 0 到 23 /
int tm_mday; / 一月中的第几天,范围从 1 到 31 /
int tm_mon; / 月份,范围从 0 到 11 /
int tm_year; / 自 1900 起的年数 /
int tm_wday; / 一周中的第几天,范围从 0 到 6 /
int tm_yday; / 一年中的第几天,范围从 0 到 365 /
int tm_isdst; / 夏令时 /
};[/code]

10 个回答
zhangjun
zhangjun 2019-06-12
1,关于获取具体时间,你发的例程里面
rt_kprintf("%s\n", ctime(&now)); 
这一句的头一句就是获取时间。代码如下
time_t now;     /* 保存获取的当前时间值 */
/* 获取时间 */
now = time(RT_NULL);
/* 打印输出时间信息 */
rt_kprintf("%s\n", ctime(&now));

资料地址在:

2,ctime函数是实现时间结构体转字符显示用的,具体实现取决于各编译器(keil的armcc,gcc的newlib,iar等各有不同的实现)。不过rtt带了一个与编译器附带c库无关的ctime实现,在
\components\libc\compilers\minilibc\time.c

3,time函数也是c库函数,不过这个函数与具体硬件有关,所以rtt针对每个编译器附带的c库都有一份实现,也是在
\components\libc\compilers\*\time.c(*表示通配符)
里面。
whj467467222
whj467467222 认证专家 2019-06-12
在MSH中输入date就会返回具体的年月日时分秒
frankfan
frankfan 2019-06-13
zhangjun 发表于 2019-6-12 14:43
1,关于获取具体时间,你发的例程里面这一句的头一句就是获取时间。代码如下
资料地址在:
2,ctime函数是 ...


非常感谢!
frankfan
frankfan 2019-06-13
    本帖最后由 frankfan 于 2019-6-13 09:37 编辑


word天 发表于 2019-6-12 17:10
1. 获取当前的linux时间戳

2.通过时间戳获取年月日时分秒

非常感谢!


顺便再问一句:
memcpy(&now, tm_now, sizeof(struct tm));
这个语句的作用是什么?


是不是因为 tm_now 是一个指针,后续运行过程中指向的地址里的内容会被其他数据覆盖掉,所以要复制到一个专门的变量now里面?
zhangjun
zhangjun 2019-06-13
frankfan 发表于 2019-6-13 09:25
非常感谢!




是,
如果你再次调用localtime就会覆盖tm_now指针指向的结构体数据。所以如果你要在多线程中使用localtime需要避免同时调用这个函数。
frankfan
frankfan 2019-06-13
    本帖最后由 frankfan 于 2019-6-13 10:16 编辑


zhangjun 发表于 2019-6-13 09:43
是,
如果你再次调用localtime就会覆盖tm_now指针指向的结构体数据。所以如果你要在多线程中使用localtim ...

这个解释说的我更糊涂了。
localtime()的返回值是一个指针,这个指针地址总是固定值吗,总是在固定位置写入新数据?
如果以后不再需要localtime()获取时间了,tm_now 需不需要用 free()函数释放内存?
zhangjun
zhangjun 2019-06-13
frankfan 发表于 2019-6-13 09:58
这个解释说的我更糊涂了。
localtime()的返回值是一个指针,这个指针地址总是固定值吗,总是在固定位置写 ...


是固定的,不需要free并且不能free
frankfan
frankfan 2019-06-13
zhangjun 发表于 2019-6-13 10:24
是固定的,不需要free并且不能free


好的,非常感谢!
word天
word天 2019-06-13
frankfan 发表于 2019-6-13 09:58
这个解释说的我更糊涂了。
localtime()的返回值是一个指针,这个指针地址总是固定值吗,总是在固定位置写 ...


返回的是它一个函数内的static struct tm 所以如果有其他地方调用了 localtime数据就不是你想要的了

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览