了解rtc_time64_to_tm()和rtc_tm_to_time64()

rtc_time64_to_tm()和rtc_tm_to_time64()主要用于RTC的驱动程序,在Linux外部RTC驱动中较常见。

打开"drivers/rtc/lib.c"

/*

* rtc_time64_to_tm - Converts time64_t to rtc_time.

* Convert seconds since 01-01-1970 00:00:00 to Gregorian date.

*/

//将time转换为年月日时分秒和星期几

void rtc_time64_to_tm(time64_t time, struct rtc_time *tm)

{

unsigned int month, year, secs;

int days;

/* time must be positive */

days = div_s64_rem(time, 86400, &secs);/*计算总共有多少天*/

/* day of the week, 1970-01-01 was a Thursday */

tm->tm_wday = (days + 4) % 7;/*计算是星期几*/

year = 1970 + days / 365;/*计算公元年数值*/

days -= (year - 1970) * 365

  • LEAPS_THRU_END_OF(year - 1)
  • LEAPS_THRU_END_OF(1970 - 1);

while (days < 0) {

year -= 1;

days += 365 + is_leap_year(year);

}

tm->tm_year = year - 1900;/*计算年*/

tm->tm_yday = days + 1;

for (month = 0; month < 11; month++) {

int newdays;

newdays = days - rtc_month_days(month, year);

if (newdays < 0)

break;

days = newdays;

}

tm->tm_mon = month;

tm->tm_mday = days + 1;

tm->tm_hour = secs / 3600;/*计算小时*/

secs -= tm->tm_hour * 3600;

tm->tm_min = secs / 60;/*计算分钟*/

tm->tm_sec = secs - tm->tm_min * 60;/*计算秒*/

tm->tm_isdst = 0;

}

/*

* rtc_tm_to_time64 - Converts rtc_time to time64_t.

* Convert Gregorian date to seconds since 01-01-1970 00:00:00.

*/

//将年月日时分秒和星期几转换为64位的time

time64_t rtc_tm_to_time64(struct rtc_time *tm)

{

return mktime64(((unsigned int)tm->tm_year + 1900), tm->tm_mon + 1,

tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);

}

相关推荐
脆皮炸鸡75516 分钟前
Linux开发工具~~~版本控制器Git以及调试工具GDB
linux·服务器·开发语言·经验分享·git·学习方法
zd84510150021 分钟前
ESP8266 MQTT连接onenet
stm32·单片机
其实秋天的枫26 分钟前
【大英赛】2009-2026年大英赛ABCD类历年真题、样卷、听力音频及答案PDF电子版
经验分享·pdf
LaughingZhu42 分钟前
Product Hunt 每日热榜 | 2026-03-30
大数据·数据库·人工智能·经验分享·搜索引擎
xuejiazhi44 分钟前
在Ubuntu下安装OpenClaw
linux·运维·服务器
爱编码的小八嘎1 小时前
C语言完美演绎6-10
c语言
卡梅德生物小喇叭1 小时前
卡梅德生物技术快报|基于 CHO 细胞的百日咳毒素中和抗体检测方法构建与验证
人工智能·经验分享·elementui·微信公众平台·facebook
cui_ruicheng1 小时前
Linux入门(一):起源、生态与基础使用
linux·运维·服务器
米糕闯编程1 小时前
xshell使用CentOS10 root用户登录,权限问题
java·linux
s09071361 小时前
Zynq-7000 PetaLinux 千兆网卡 Link UP 但无法 Ping 通的终极排查与解决(以 KSZ9031 为例)
linux·skew·zynq·ksz9031·ping不通