time()与localtime()函数:获取实时时钟(RTC)的当前时间

localtime 是 C 标准库中的函数,用于将表示时间的 time_t 类型的值转换为本地时间的结构体表示。具体来说,它接受一个指向 time_t 的指针作为参数,并返回一个指向表示本地时间的 struct tm 结构体的指针。

函数原型如下:

struct tm *localtime(const time_t *time);

其中:

time 是一个指向 time_t 类型的指针,表示要转换的时间。
返回值是一个指向 struct tm 结构体的指针,表示本地时间。
struct tm 结构体包含了年、月、日、时、分、秒等时间元素的信息。它的定义通常如下:

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(1 月)到 11(12 月) */
  int tm_year;  /* 年份,从 1900 开始 */
  int tm_wday;  /* 星期几,从 0(周日)到 6(周六) */
  int tm_yday;  /* 一年中的天数,范围从 0 到 365 */
  int tm_isdst; /* 夏令时标志,负数表示未知 */
};

通过使用 timeinfo,你可以方便地访问当前时间的各个部分,从而进行时间的处理和操作。

time_t rawtime;
struct tm* timeinfo;

time(&rawtime);           // 获取当前时间的 time_t 值
timeinfo = localtime(&rawtime);  // 将 time_t 转换为本地时间的结构体

// 使用 timeinfo 中的各个元素,例如:
int year = timeinfo->tm_year - 100U;
int month = timeinfo->tm_month +1U;
int dayOfMonth = timeinfo->tm_mday;
int hour = timeinfo->tm_hour;
int minute = timeinfo->tm_min;
int second = timeinfo->tm_sec;

// 这里 timeinfo 就包含了当前本地时间的各个元素

为什么要-100U?
在代码 pRTC->m_year = (unsigned char)timeinfo->tm_year - 100U; 中,timeinfo->tm_year 表示的是从 1900 年开始至今的年数。因此,为了得到实际的年份,需要减去 1900。而 (unsigned char) 的强制类型转换将确保结果被截断为一个无符号字符。

对于年份而言,通常是使用两位数表示的。因此,(unsigned char)timeinfo->tm_year - 100U 的目的是将年份调整为以 2000 年为基准的两位数形式。例如,假设 timeinfo->tm_year 的值为 121,那么经过调整后的 pRTC->m_year 就会被设置为 21。

这样的调整是为了适应特定的时间表示方式,例如在许多系统中,年份的表示采用两位数形式,而且通常被偏移了一个固定值,比如 1900。

月份+1U同理,struct tm 结构体中的 tm_mon 字段表示月份,其范围是 0 到 11,其中 0 表示一月,1 表示二月,以此类推,11 表示十二月。

time() 是C语言标准库中的一个函数,用于获取当前系统时间的秒数(自1970年1月1日以来的秒数,也称为UNIX时间戳)。它的声明如下:

time_t time(time_t *timer);

time_t 是一种整数类型,通常是一个长整型,用来表示时间。使用 time() 函数可以获取程序执行时的时间戳,通常用于记录日志、计时等应用场景。
timer 是一个指向 time_t 类型的指针,可以传递一个用于存储时间的变量地址,也可以传递 NULL,表示不关心时间值。
函数返回当前时间的秒数,如果出现错误,返回 -1。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值