搜索
查看: 11591|回复: 8

[原创] 单片机RTC时间转为Unix时间戳

[复制链接]

该用户从未签到

39

主题

975

帖子

45

蝴蝶豆

论坛元老

最后登录
2021-3-21
发表于 2017-3-23 10:28:33 | 显示全部楼层 |阅读模式
最近因工作需要把单片机的YYMMDDHHMMSS转为Unix的时间戳,网上大多都是上位机的程序,经过搜索引擎的帮助下,终于实现了把单片机的时间转为Unix的时间戳,特贴出代码给社区内需要的朋友,转载请注明出处!!!

由于使用了 struct tm 结构体好是mktime,所以需要包含 <time.h>头文件,把下面的年月日时分秒换成实际的年月日时分秒即可!
废话不多说,核心代码:
  1. int32_t GetTick(void)  
  2. {  
  3.     struct tm stm;  
  4.     int iY, iM, iD, iH, iMin, iS;  
  5.        
  6.         RTC_DateTypeDef sdatestructureget;
  7.         RTC_TimeTypeDef stimestructureget;

  8.         /* Get the RTC current Time */
  9.         HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN);
  10.         /* Get the RTC current Date */
  11.         HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN);
  12.   
  13.     memset(&stm,0,sizeof(stm));  

  14.        
  15.         iY = sdatestructureget.Year;  
  16.     iM = sdatestructureget.Month;  
  17.     iD = sdatestructureget.Date;  
  18.     iH = stimestructureget.Hours-8;//北京时间-8=UTC  
  19.     iMin = stimestructureget.Minutes;  
  20.     iS = stimestructureget.Seconds;

  21.   
  22.     stm.tm_year=iY+100;
  23.     stm.tm_mon=iM-1;  
  24.     stm.tm_mday=iD;  
  25.     stm.tm_hour=iH;  
  26.     stm.tm_min=iMin;  
  27.     stm.tm_sec=iS;  

  28.     return mktime(&stm);  
  29. }
复制代码

评分

参与人数 1ST金币 +1 收起 理由
781354052 + 1 数据类型应该为uint32_t

查看全部评分

回复

使用道具 举报

该用户从未签到

14

主题

205

帖子

0

蝴蝶豆

金牌会员

最后登录
2020-12-5
发表于 2017-3-23 10:32:35 | 显示全部楼层
点赞
回复

使用道具 举报

该用户从未签到

29

主题

1285

帖子

59

蝴蝶豆

论坛元老

最后登录
2021-6-27
发表于 2017-3-23 10:34:30 | 显示全部楼层
赞                              
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

100

帖子

0

蝴蝶豆

高级会员

最后登录
2021-2-23
发表于 2017-3-23 10:35:21 | 显示全部楼层
赞赞赞
回复

使用道具 举报

该用户从未签到

39

主题

975

帖子

45

蝴蝶豆

论坛元老

最后登录
2021-3-21
 楼主| 发表于 2017-3-23 10:43:33 | 显示全部楼层
多谢各位捧场~
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

1

帖子

0

蝴蝶豆

新手上路

最后登录
2018-6-28
发表于 2018-6-12 15:44:18 | 显示全部楼层
你这个应该有问题吧    首先年份上应该减去1900   月份上减一     
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

4

帖子

0

蝴蝶豆

初级会员

最后登录
2020-6-10
发表于 2018-6-28 16:09:07 | 显示全部楼层
我姓罗 发表于 2018-6-12 15:44
你这个应该有问题吧    首先年份上应该减去1900   月份上减一

实测没毛病,这是HAL库,不懂别乱说
回复 支持 反对

使用道具 举报

该用户从未签到

76

主题

759

帖子

17

蝴蝶豆

论坛元老

最后登录
2022-5-20
发表于 2018-12-4 16:12:25 | 显示全部楼层
正好用到,感谢。
要是把时间戳转本地时间的函数也写出来就更好了。
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

7

帖子

0

蝴蝶豆

中级会员

最后登录
2020-8-19
发表于 2019-7-3 09:24:15 | 显示全部楼层
mktime(&stm),这句话很费资源啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-5-4 23:59 , Processed in 0.182417 second(s), 43 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表